带有限制和连接的MySQL group_concat

时间:2015-02-04 22:55:55

标签: mysql sql

我有这些表格:

# 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种商品,真的很奇怪......有人知道更好的解决方案吗?

1 个答案:

答案 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,然后在groupshop_id,最后只选择那些count组等于4的人。不需要在这里使用两个左连接。