mysql - MySQL加入分组没有完美加入
问题描述
我有三个表并想加入它们,但是当使用联系人表中的父 ID 分组时,加入会多次返回单行。
contact
桌子-
ID | 姓名 |
---|---|
1 | 穆拉德 |
2 | 泰哈鲁尔 |
phone
桌子-
ID | 联系人 ID | 电话 |
---|---|---|
1 | 1 | 017 |
2 | 2 | 014 |
3 | 2 | 015 |
email
桌子-
ID | 联系人 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 | 姓名 | 电话 | 电子邮件 |
---|---|---|---|
1 | 穆拉德 | 017 | mur@test.com,has@test.com,tan@test.com |
2 | 泰哈鲁尔 | 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 小提琴链接:http ://sqlfiddle.com/#!9/ded29f/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
推荐阅读
- html - 使下拉菜单可见
- flutter - Flutter - SingleChildScrollView 固定小部件
- cordova - Ionic 4 - chrome sockets udp 不创建套接字而不输出任何错误
- google-sheets - 在 Google 表格中搜索不同的列并计算特定值
- javascript - 从存储在数组中的键解构 js 对象
- android - Koin:如何在范围之间共享类实例
- r - R {drake}计划:将许多数据集读入单个目标
- python - 合并保持多索引的数据帧
- python - 如何返回字典中保存的数据框列
- php - PHP: strtotime vs mktime speed for getting 1 个月前