【问题标题】:COUNT(), GROUP BY and NULL Values in a MySql queryMySql 查询中的 COUNT()、GROUP BY 和 NULL 值
【发布时间】:2012-05-01 08:45:08
【问题描述】:

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

有没有办法恢复所有产品,包括空值? 任何想法改变我的查询?会气死我的!!

提前致谢!

【问题讨论】:

    标签: mysql count group-by isnull


    【解决方案1】:

    使用左连接:

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

    【讨论】:

    • 我怀疑我的问题与LEFT JOIN有关,并想通过MySql查看我的笔记以寻找正确的答案,但是您之前回答了我,我很高兴告诉您,您是正确的,并且查询会产生预期的结果。谢谢!你是一个裂缝!但是,我会在下次提问之前检查我的笔记。再次感谢您的建议!
    • 干杯,欢迎! :-) 尝试使用 Postgresql 一段时间,它就像一个开源 Oracle。看看你可以用 CTE 和窗口函数实现什么,例如:stackoverflow.com/a/10395130
    • 仔细查看查询,它本身就是关于LEFT JOIN的大师班。通过研究查询比查看我关于 MySQL 的笔记学到的更多。再次非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多