我怎样才能做这个多重 JOIN 查询?

Posted

技术标签:

【中文标题】我怎样才能做这个多重 JOIN 查询?【英文标题】:How can i do this multiple JOIN query? 【发布时间】:2016-12-13 12:21:14 【问题描述】:

我需要构建一个包含多个 JOIN 的查询,更具体地说,是 2 个 JOIN,但它会得到重复的结果,请检查:

我当前的表:

食品商店

id, slug, name

categories_food_shops

id, id_cat, id_food_shop

pictures_food_shops

id, pic_slug, id_food_shop

我需要从 food_shops 获取 *,从 categories_food_shops 获取 id_cat,从 pictures_food_shops 获取 pic_slug...

我目前的查询是这样的:

SELECT food_shops.id, food_shops.slug, food_shops.name, 
GROUP_CONCAT(categories_food_shops.id_category) as categories, 
GROUP_CONCAT(pictures_food_shops.slug) as pictures 
FROM
food_shops 
JOIN categories_food_shops 
    ON food_shops.id = categories_food_shops.id_food_shop 
JOIN pictures_food_shops 
    ON food_shops.id = pictures_food_shops.id_food_shop 
GROUP BY food_shops.slug, pictures_food_shops.id_food_shop

但由于我的 Pictures_food_shops 与 categories_food_shops 的结果更多,所以我的结果是“四倍”:

我可以做些什么来防止这种情况并只获得正确数量的类别? 第一行只有 1,第二行只有 3 和 5,最后一行只有 7,1,6?

谢谢!

【问题讨论】:

mysql GROUP_CONCAT duplicates的可能重复 只是为了澄清 id_category 来自哪里?我在上面的架构中没有看到它? 【参考方案1】:

你可以试试这个:

...
GROUP_CONCAT(DISTINCT categories_food_shops.id_category) as categories, 
....

这也适用于图片。

Here is the documentation 和 DISTINCT 使用示例。

【讨论】:

这正是我所需要的,如此简单:P kkkkkkkkk,非常感谢 @user3159043 很高兴为您提供帮助,如果对您有用,请点赞并选择答案,谢谢!

以上是关于我怎样才能做这个多重 JOIN 查询?的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能做一个不同的总和?

我怎样才能使这个查询 sargable?

我怎样才能重复这个查询 100 次?

SQLite3-我怎样才能加快这个 SELECT 查询?

我怎样才能用 mongodb 编写这个查询? [复制]

我怎样才能加快这个索引视图?