我有一个连接 4 个表的查询。表是用户、user_info、电子邮件和电话。 一个用户可以有一个或多个电话和电子邮件。
这是sql查询:
SELECT ur.login_id as loginId, ue.user_email_address as email, up.phone_number as phone
FROM greydeltadb.gd_user ur
LEFT JOIN greydeltadb.gd_user_info uri ON uri.user_id=ur.user_id
INNER JOIN greydeltadb.gd_user_emails ue ON ur.user_id = ue.user_id
INNER JOIN greydeltadb.gd_phone up ON ur.user_id = up.user_id
ORDER BY ur.login_id
当我执行此查询时,对于拥有 2 封电子邮件和 2 部电话的用户,我会得到这样的结果:
loginId email phone
abc abc@gmail.com 123456
abc abc@gmail.com 798446
abc def@gmail.com 123456
abc def@gmail.com 798446
然后我了解到 GROUP_CONCAT() 更新后的查询是:
SELECT ur.login_id, GROUP_CONCAT(ue.user_email_address) as emails,
GROUP_CONCAT(up.phone_number) as phones
FROM greydeltadb.gd_user ur
LEFT JOIN greydeltadb.gd_user_info uri ON uri.user_id=ur.user_id
INNER JOIN greydeltadb.gd_user_emails ue ON ur.user_id = ue.user_id
INNER JOIN greydeltadb.gd_phone up ON ur.user_id = up.user_id
GROUP BY ur.login_id
此查询返回结果:
loginId email phone
abc abc@gmail.com, def@gmail.com,abc@gmail.com, def@gmail.com 123456, 798446,123456, 798446
但我希望输出为:
loginId email phone
abc abc@gmail.com, def@gmail.com 123456, 798446
请帮忙。
最佳答案
你只需要一个distinct
SELECT ur.login_id,
GROUP_CONCAT(distinct ue.user_email_address) as
emails,
GROUP_CONCAT(distinct up.phone_number) as
phones
FROM greydeltadb.gd_user ur
LEFT JOIN greydeltadb.gd_user_info uri ON
uri.user_id=ur.user_id
INNER JOIN greydeltadb.gd_user_emails ue ON
ur.user_id = ue.user_id
INNER JOIN greydeltadb.gd_phone up ON ur.user_id =
up.user_id
GROUP BY ur.login_id
关于mysql - 如何在mysql中将多行合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53921774/