返回产品ID及其计数,即使mysql中没有它们的变体

时间:2016-07-24 05:54:14

标签: mysql

我有3张桌子:

table_products - product_id, pname
variants - vid, vname
table_product_varients - product_id, vid

我希望获得所有产品的产品变体数量,如果产品没有变体,则应将数量计为0。

这是我的疑问:

SELECT P.product_id, count(*) AS count
FROM table_product_varients AS PV
LEFT JOIN table_products AS P ON PV.product_id = P.product_id
GROUP BY P.product_id
ORDER BY P.product_id ASC

但是这并没有给出没有变种的产品。

任何人都可以帮我吗?

1 个答案:

答案 0 :(得分:3)

您应该将table_products表格放到left。 你也应该算上PV.product_id

SELECT 
P.product_id, 
count(PV.product_id) AS count
FROM table_products AS P 
LEFT JOIN table_product_varients AS PV ON PV.product_id = P.product_id
GROUP BY P.product_id
ORDER BY P.product_id ASC;

注意:对于table_products_varients表中没有相应条目的产品,您的NULL值为PV.product_id。因此COUNT(NULL)实际上会返回0

关于COUNT的一些细微之处:

SELECT COUNT(0);   Result: 1

SELECT COUNT(-1);  Result: 1

SELECT COUNT(NULL); Result: 0

SELECT COUNT(71); Result: 1

SQL FIDDLE