繁体   English   中英

MySQL JOIN / GROUP_CONCAT第二个表?

[英]MySQL JOIN / GROUP_CONCAT second table?

所以我有这个完美的查询:

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;

没有运气......或至少查询执行但它做了一些奇怪的重复事情......任何帮助都会很棒!

谢谢!

它做了奇怪的事情,因为有某些行的交叉产品。 您可以使用DISTINCT关键字获取唯一的电话号码:

GROUP_CONCAT(DISTINCT phones.phone_number) AS phone_numbers,

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

这发生在我身上,我后来不得不改变我的查询。

SELECT 
   ( SELECT GROUP_CONCAT(`partnumber`) FROM `product_partnumber` AS `n` WHERE `p`.`id`=`n`.`product_id`) as `partnumbers`,
   ( SELECT GROUP_CONCAT(`oem`) FROM `product_oem` AS `n` WHERE `p`.`id`=`n`.`product_id`) as `oems`
FROM `product` AS `p`

所以我不得不使用子查询,否则我有重复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM