MySQL在一次查询中显示公司的类别及其计数
我试图在单个查询中显示companyId=2的类别计数,即使为0: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
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子句中,否则它将否定外部联接。