我有这些表格:
# tb_shops
shop_id PK
shop_name
# tb_products
product_id PK
product_name
shop_id FK
我需要列出所有商店'有4种产品,但有些商店有4种以上的产品。
我尝试了这个查询:
select a.shop_id,
a.shop_name,
count(b.product_id) as ptotal,
group_concat(c.product_name separator ',') as products
from tb_shops a
left join tb_products b on a.shop_id=b.shop_id
left join (
select product_name,shop_id
from tb_products
limit 4) as c
on a.shop_id=c.shop_id
group by a.shop_id
order by a.shop_name asc
但是,它没有正常工作。它返回重复的产品。如果我在distinct
中使用group_concat
,它不会附带商店的4种商品,真的很奇怪......有人知道更好的解决方案吗?
答案 0 :(得分:0)
我需要列出所有商店'有4个产品但有些商店有 超过4种产品
您可以使用having
关键字并删除一些joins
select a.shop_id,
a.shop_name,
count(b.product_id) as ptotal,
group_concat(b.product_name separator ',') as products
from tb_shops a
join tb_products b on a.shop_id = b.shop_id
group by b.shop_id
having count(b.product_id) = 4
order by a.shop_name asc;
这将解决您的问题。基本上你在这里做的是在botch表上做一个普通的join
,然后在group
做shop_id
,最后只选择那些count
组等于4的人。不需要在这里使用两个左连接。