2012-02-09 27 views
0

我想顯示分類計數,即使0,對於companyId = 2在一個單一的查詢公司數:MySQL的展示類和他們在一個查詢

categories 
+--------+-----------+ 
| catId | catName | 
+--------+-----------+ 
| 1 | cat1 | 
| 2 | cat2 | 
| 3 | cat3 | 

products 
+--------+-----------+---------------+---------+ 
| prodId | prodName | companyId | catId | 
+--------+-----------+---------------+---------+ 
| 1 | prod1 |  2  | 1 | 
| 2 | prod2 |  2  | 3 | 
| 3 | prod3 |  1  | 3 | 

SELECT c.catName, COUNT(p.catId) AS prod_catCount 
FROM categories c 
LEFT JOIN products p ON c.catId=p.catId 
WHERE p.companyId=2 
GROUP BY c.catId 

這導致:

+---------+---------------+ 
| catName | prod_catCount | 
+---------+---------------+ 
| cat1 |  1  | 
| cat3 |  1  | 

我怎樣才能使它導致:

+---------+---------------+ 
| catName | prod_catCount | 
+---------+---------------+ 
| cat1 |  1  | 
| cat2 |  0  | <-- Shows 0 count as well 
| cat3 |  1  | 

我以爲左連接會照顧這一點,但是事實並非如此。任何想法如何讓這個工作?

回答

4

移動p.companyId=2WHERE條款列入ON條款

SELECT c.catName, COUNT(p.catId) AS prod_catCount 
FROM categories c 
LEFT JOIN products p ON c.catId=p.catId AND p.companyId=2 
GROUP BY c.catId 
+0

如此簡單,只需切換WHERE與AND :)謝謝沃克 – Maverick 2012-02-09 21:54:08

+2

這時候使用外連接的是一個常見的錯誤。您需要將可選表中的任何條件放入ON子句中,否則它將取消外部連接。 – 2012-02-09 22:00:49

相關問題