2012-02-09 23 views
0

私は、単一のクエリ内の企業ID = 2のために、しても0の場合、カテゴリ数を表示しようとしている: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

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

はそう単純で、単に切り替えるON句にWHERE句から移動p.companyId=2 WHEREとAND :)おかげで外部結合を使用するときに一般的な間違いですウォーカー – Maverick

+2

。オプションテーブルの条件をON句に入れる必要があります。そうでない場合は、外部結合を無効にします。 –

関連する問題