我有一个连接4个表的查询。表格包括用户、用户信息、电子邮件和电话。一个用户可以有一个或多个电话和电子邮件。
以下是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
然后我了解了groupconcat(),更新后的查询是:
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
请帮忙。
3条答案
按热度按时间4si2a6ki1#
你只需要一个
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
tzcvj98z2#
只需使用distinct子句,请参阅group\ U concat的文档:
在mysql中,可以获得表达式组合的串联值。要消除重复值,请使用distinct子句。要对结果中的值进行排序,请使用order by子句。。。。。。。。。。。。。。。。。
如果您有疑问,只需使用:
nlejzf6q3#
首先,你没有使用
uri
,因此在查询中不需要它。第二,你有一个
left join
基本上什么也不做。我怀疑你想要的是用户,甚至是那些没有电话或电子邮件的用户。如果是: