Count()和左连接问题

时间:2011-02-13 10:01:44

标签: sql mysql count left-join

我遇到一个查询问题,该查询显示商店列表,其中包含与之关联的产品数量。我一直在玩左连接等一段时间但是无济于事。表格具有以下结构:

包含列的商店表:idname

包含列的产品表:idnamestatusshop

查询如下:

select s.name
       , p.name
       , count(p.id) 
from   Product as p 
       left join Shop as s on p.shop=s.id
where  p.status <> '8796107276379'
group by 
       s.id

我找不到有0件商品的商店。我怎么能实现这个目标呢?

底层数据库是MySQL。

谢谢! Krt_Malta

4 个答案:

答案 0 :(得分:22)

您需要在左侧进行SHOP,因为右侧是可能没有数据的那个,在本例中为PRODUCT。

不仅如此,您还需要WHERE条件作为LEFT-JOIN ON条件,以便它连接到状态条件下的产品,并且即使不需要状态也只需对产品进行折扣(同时保持购物)。

select s.name
       , p.name
       , count(p.id) 
from   Shop as s
       left join Product as p on p.shop=s.id AND p.status <> '8796107276379'
group by 
       s.id, p.name

答案 1 :(得分:1)

select s.name
       , p.name
       , count(p.id) 
from   Shop as s 
       left join Product as p on s.id=p.shop
where  p.status <> '8796107276379'
group by 
       s.id

答案 2 :(得分:0)

您需要将OR p.status IS NULL添加到where子句中。

select s.name, p.name, count(p.id) 
from Shop s 
left join Product p on p.shop = s.id
where (p.status <> '8796107276379' OR p.status IS NULL) 
group by s.name, p.name

答案 3 :(得分:0)

我也遇到了这个问题,虽然我不完全确定为什么,将谓词放在jojn本身而不是实际的主要查询是如何解决它。

在阅读本文之前,我实际上记录了整个事情。我用了两个小表的简单例子,它解释了我希望区别,也许它会有所帮助

http://simpleritsolutions.com/sql/left/join/problems

相关问题