我有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
但是这并没有给出没有变种的产品。
任何人都可以帮我吗?
答案 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