我有兩個表,foo
和bar
:多個表的SELECT查詢
+----+-----+ +----+-----+
| id | val | | id | val |
+----+-----+ +----+-----+
| 1 | qwe | | 1 | asd |
| 2 | rty | | 3 | fgh |
+----+-----+ +----+-----+
id
不是唯一在這裏。 foo
中的所有ID在bar
中均不相同,反之亦然。我需要計算與特定ID的所有行兩個表中,並在新表中呈現出來,如:
+----+-----------+-----------+
| id | count_foo | count_bar |
+----+-----------+-----------+
| 1 | 1 | 1 |
| 2 | 1 | 0 |
| 3 | 0 | 1 |
+----+-----------+-----------+
我試過UNION SELECT
:
SELECT id, COUNT(id) AS count_foo, 0 AS count_bar FROM foo GROUP BY id
UNION SELECT id, 0, COUNT(id) FROM bar GROUP BY id;
但這輸出與id=1
連續兩次,像
+----+-----------+-----------+
| id | count_foo | count_bar |
+----+-----------+-----------+
| 1 | 1 | 0 | <- not good
| 2 | 1 | 0 |
| 1 | 0 | 1 | <- not good
| 3 | 0 | 1 |
+----+-----------+-----------+
我也試過LEFT JOIN
:
SELECT id, COUNT(foo.id) AS count_foo, COUNT(bar.id) AS count_bar
FROM foo LEFT JOIN bar USING(id) GROUP BY id;
但這查詢忽略從表bar
行用的ID表foo
丟失:
+----+-----------+-----------+
| id | count_foo | count_bar |
+----+-----------+-----------+
| 1 | 1 | 1 |
| 2 | 1 | 0 |
+----+-----------+-----------+ <- can I haz `id=3`?
我缺少什麼?什麼是正確的查詢或正確的手冊閱讀?
謝謝。
您是否嘗試過把你的'LEFT JOIN'聲明和'UNION '用一個有'RIGHT JOIN'的類似聲明來代替它?因爲我沒有時間去嘗試,所以我只是要求脫離頭頂。 – Stephen 2010-07-28 09:59:50
@Stephen這實際上也可以,謝謝。現在我有另一個問題 - 兩個解決方案,而不是none:( – hudolejev 2010-07-28 10:36:11