一尘不染

MySQL JOIN / GROUP_CONCAT第二张表?

sql

所以我有这个查询,完美地工作:

SELECT users.*,
GROUP_CONCAT(categories.category_name) AS categories
FROM users
LEFT OUTER JOIN user_categories ON users.user_id = user_categories.user_id
LEFT OUTER JOIN categories ON user_categories.category_id = categories.category_id
WHERE users.user_city = 'brooklyn'
GROUP BY users.user_id
LIMIT 10;

假设我还有一个包含电话号码的表,对于“用户”来说,用户可以有任意数量的电话号码…我该如何处理与类别完全相同的事情?换句话说,我想获得另一列,其中包含在“电话”表中找到的所有具有相同“
user_id”的phone_numbers,并将它们连接在一起(phone1,phone2,phone3)?我试过了:

SELECT users.*,
GROUP_CONCAT(phones.phone_number) AS phone_numbers,
GROUP_CONCAT(categories.category_name) AS categories
FROM users
LEFT OUTER JOIN phones ON users.user_id = phones.user_id
LEFT OUTER JOIN user_categories ON users.user_id = user_categories.user_id
LEFT OUTER JOIN categories ON user_categories.category_id = categories.category_id
WHERE users.user_city = 'brooklyn'
GROUP BY users.user_id
LIMIT 10;

运气不好…或者至少执行了查询,但是它做了一些奇怪的重复操作…任何帮助都将非常棒!

谢谢!


阅读 142

收藏
2021-03-10

共1个答案

一尘不染

它确实很奇怪,因为某些行的叉积。您可以使用DISTINCT关键字仅获取唯一的电话号码:

GROUP_CONCAT(DISTINCT phones.phone_number) AS phone_numbers,

检查文档。或者,您可以在另一个查询中获取电话号码,在该查询中,您仅选择条件为WHERE phones.user_id IN (x, x, x, ...)(x是从第一个查询返回的ID)的电话号码。

2021-03-10