1

我有这个 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”的产品。

任何想法恢复所有产品,包括空值?有什么想法可以更改我的查询吗?它会让我生气的!

提前致谢!

4

1 回答 1

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

于 2012-05-01T00:39:13.587 回答