我的MySql查询部分工作:
SELECT p.product_id, p.product_name, p.sales,
p.length, p.hits, COUNT(w.product_id) AS favorites
FROM `products` AS p, `products_mf_xref` AS m,
`wishlist_items` AS w
WHERE m.manufacturer_id = '1'
AND p.product_id = m.product_id
AND m.product_id = w.product_id
GROUP BY m.product_id ORDER BY p.product_id ASC
我正在从表中恢复某些字段并尝试获取这些产品在另一个表中引用的次数(最后一个表称为“whishlist”)。查询工作正常,但我只获得了愿望清单表中至少引用过一次的产品。
我读过count(*)没有得到有意义的NULL值,但我还需要在愿望清单表中没有引用的产品,我的意思是COUNT(w.product_id)等于的产品0" 。
有什么想法恢复所有产品,包括空值? 有什么想改变我的疑问吗?这会让我发疯!!
提前致谢!
答案 0 :(得分:1)
使用LEFT JOIN:
SELECT p.product_id, p.product_name, p.sales,
p.length, p.hits, COUNT(w.product_id) AS favorites
FROM `products` AS p
LEFT JOIN `products_mf_xref` AS m
ON p.product_id = m.product_id AND m.manufacturer_id = '1'
LEFT JOIN `wishlist_items` AS w ON m.product_id = w.product_id
GROUP BY m.product_id ORDER BY p.product_id ASC
顺便说一句,尽可能使用JOIN来镜像数据关系,使用WHERE作为过滤器