2

私はここで問題に直面しています:

私は2つのテーブルを持っています:

usersテーブル:

+----+---------------+----------+
| id | username      | company  |
+----±---------------±----------+
| 1  | John          | 0        |
| 2  | Jack          | 0        |
| 3  | Casimir       | 0        |
±----±---------------±----------±

ordersテーブル:

+----+---------------+----------+--------+
| id | date          | iduser   | status |
+----±---------------±----------+--------+
| 1  | 2012-05-28    | 1        | 1      |
| 2  | 2012-05-25    | 1        | 1      |
| 3  | 2012-04-28    | 2        | 1      |
| 4  | 2012-03-28    | 1        | 1      |
| 5  | 2012-02-28    | 2        | 0      |
±----±---------------±----------±--------+

私がやろうとしているのは、次のような結果を得ることです。

+----------+---------------+-------------+
| username | COUNT(order)  | MAX(date)   |
+----------±---------------±-------------+
| John     | 3             | 2012-05-28  |
| Jack     | 1             | 2012-04-28  |
| Casimir  | 0             | NULL        |
±----------±---------------±-------------±

これが私が今持っているリクエストです:

SELECT u.username, COUNT(o.id), MAX(o.date)
FROM users u
INNER JOIN orders ON u.id = o.iduser
WHERE o.status = 1
GROUP BY u.id

このリクエストにより、次のような結果が得られます。

+----------+---------------+-------------+
| username | COUNT(order)  | MAX(date)   |
+----------±---------------±-------------+
| John     | 3             | 2012-05-28  |
| Jack     | 1             | 2012-04-28  |
±----------±---------------±-------------±

ご覧のとおり、Casimir注文をしなかったため、ユーザーは表示されません。リクエストを変更して、必要な結果を得るにはどうすればよいですか?

ありがとう !

4

2 に答える 2

4

またははLEFT JOINLEFT OUTER JOIN結合されたテーブルに一致するものがないものを含む、初期テーブルのすべての行を含みます

SELECT u.username, COUNT(o.id), MAX(o.date)
FROM users u
LEFT OUTER JOIN orders o ON u.id = o.iduser AND o.status = 1
GROUP BY u.id
于 2012-05-28T16:05:46.457 に答える
2

OUTER JOIN現在のの代わりにを使用する必要がありますINNER JOIN

ジェフの投稿を見て、それらがどのように異なるかを確認してください:http: //www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

于 2012-05-28T16:06:37.797 に答える