【问题标题】:MySQL Display categories and their count for company in one queryMySQL 在一个查询中显示公司的类别及其计数
【发布时间】:2012-02-09 21:43:37
【问题描述】:

我正在尝试在单个查询中显示 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       |

我以为左连接会解决这个问题,但事实并非如此。任何想法如何让它发挥作用?

【问题讨论】:

    标签: mysql select join left-join categories


    【解决方案1】:

    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
    

    【讨论】:

    • 如此简单,只需使用 AND 切换 WHERE 即可:) 谢谢 Walker
    • 这是使用外连接时的常见错误。您需要将可选表的任何条件放入 ON 子句中,否则它会否定外连接。
    猜你喜欢
    • 2011-08-13
    • 1970-01-01
    • 2019-10-07
    • 2022-01-14
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多