MySQL加入分组没有完美加入
Posted
技术标签:
【中文标题】MySQL加入分组没有完美加入【英文标题】:MySQL joining with grouping did not join perfectly 【发布时间】:2021-12-26 13:20:00 【问题描述】:我有三个表并想加入它们,但是当使用联系人表中的父 ID 分组时,加入会多次返回单行。
contact
表-
id | Name |
---|---|
1 | Murad |
2 | Tajharul |
phone
表-
id | contact_id | phone |
---|---|---|
1 | 1 | 017 |
2 | 2 | 014 |
3 | 2 | 015 |
email
表-
id | contact_id | |
---|---|---|
1 | 1 | mur@test.com |
2 | 1 | has@test.com |
3 | 1 | tan@test.com |
4 | 2 | taj@test.com |
5 | 2 | har@test.com |
期望的输出-
id | Name | Phone | |
---|---|---|---|
1 | Murad | 017 | mur@test.com,has@test.com,tan@test.com |
2 | Tajharul | 014,015 | taj@test.com,har@test.com |
这是我迄今为止尝试过的-
SELECT contact.name , GROUP_CONCAT(phone.phone) phone, GROUP_CONCAT(email.email) email
FROM
contact
JOIN phone ON contact.id = phone.contact_id
JOIN email ON contact.id = email.contact_id
GROUP BY contact.id
mysql Fiddle 链接:http://sqlfiddle.com/#!9/ded29f/1
【问题讨论】:
使用distinct
:sqlfiddle.com/#!9/ded29f/2
【参考方案1】:
在 group_concat 中使用 DISTINCT
SELECT contact.name , GROUP_CONCAT(DISTINCT phone.phone) phone, GROUP_CONCAT(DISTINCT email.email) email
FROM
contact
JOIN phone ON contact.id = phone.contact_id
JOIN email ON contact.id = email.contact_id
GROUP BY contact.id
【讨论】:
第二个联系人有两次相同的电子邮件..New Fiddle link 如果您不想在电子邮件中区分,请删除 DISTINCT【参考方案2】:您可以通过在 Group concat 中使用子查询和 Distinct 来实现:
SELECT T1.id, T1.name, T1.phone, GROUP_CONCAT(DISTINCT email.email) email
FROM
(SELECT contact.id, contact.name , GROUP_CONCAT(DISTINCT phone.phone) phone
FROM
contact
JOIN phone ON contact.id = phone.contact_id
GROUP BY contact.id) T1
JOIN email ON T1.id = email.contact_id
GROUP BY T1.id
【讨论】:
第二个联系人有两次相同的电子邮件..New link 我已经更新了解决方案,现在查看 好的,我检查一下以上是关于MySQL加入分组没有完美加入的主要内容,如果未能解决你的问题,请参考以下文章