MySQL在一次查询中显示公司的类别及其计数

MySQL在一次查询中显示公司的类别及其计数,mysql,select,join,left-join,categories,Mysql,Select,Join,Left Join,Categories,我试图在单个查询中显示companyId=2的类别计数,即使为0: categories +--------+-----------+ | catId | catName | +--------+-----------+ | 1 | cat1 | | 2 | cat2 | | 3 | cat3 | products +--------+-----------+---------------+---------+ | prodId

我试图在单个查询中显示companyId=2的类别计数,即使为0:

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       |
+---------+---------------+
|catName | prod_catCount|
+---------+---------------+
|第1类| 1|

|cat2 | 0 |将
p.companyId=2
WHERE
子句移动到
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

p.companyId=2
WHERE
子句移动到
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

非常简单,只需使用和切换位置:)谢谢Walker这是使用外部联接时的常见错误。您需要将可选表上的任何条件放入on子句中,否则它将否定外部联接。非常简单,只需使用和切换WHERE:)谢谢Walker这是使用外部联接时的常见错误。您需要将可选表上的任何条件放入on子句中,否则它将否定外部联接。