我遇到一个查询问题,该查询显示商店列表,其中包含与之关联的产品数量。我一直在玩左连接等一段时间但是无济于事。表格具有以下结构:
包含列的商店表:id
,name
包含列的产品表:id
,name
,status
,shop
查询如下:
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
答案 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本身而不是实际的主要查询是如何解决它。
在阅读本文之前,我实际上记录了整个事情。我用了两个小表的简单例子,它解释了我希望区别,也许它会有所帮助