MySql查询中的COUNT(),GROUP BY和NULL值

时间:2012-05-01 00:32:53

标签: mysql count group-by isnull

我的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" 。

有什么想法恢复所有产品,包括空值? 有什么想改变我的疑问吗?这会让我发疯!!

提前致谢!

1 个答案:

答案 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作为过滤器