我有四个表格,person
,email
,organ
和person_organ
以及:
person
和email
具有一对多关系; person
和organ
通过person_organ
具有多对多关系。 问题,如何编写查询,以便为特定器官中的人设置包含full name
,all email
和all organ
列的集合?
据我所知,使用GROUP_CONCAT
组合按人分组的电子邮件:
select person.id as 'ID',
organ.short_name as 'Organ',
CONCAT ( person.first_name, ' ', person.last_name) as 'Full Name',
GROUP_CONCAT(email.email SEPARATOR ', ') as 'Emails'
from person
left join person_organ on person.id = person_organ.person_id
join organ on organ.id = person_organ.organ_id
join email on email.person_id = person.id
where person_organ.organ_id = 1
group by person.id;
我可以添加到上述查询中,以便添加另一列,显示此人所属的所有组?
到目前为止我所拥有的:
+----+-------+--------------+----------------------------+
| ID | Organ | Full Name | Emails |
+----+-------+--------------+----------------------------+
| 1 | SC | John Doe | john@doe.me, jdoe@mail.org |
| 2 | SC | Richard Rowe | rowe@mail.us |
| 3 | SC | San Zhang | zhangsan@mail.cn |
| 4 | SC | Taro Yamada | yamada@mail.jp |
+----+-------+--------------+----------------------------+
我想要的是,除了单数 Organs
字段之外,还要将Organ
作为上述结果集的附加列:
+----+-------+--------------+----------------------------+------------+
| ID | Organ | Full Name | Emails | Organs |
+----+-------+--------------+----------------------------+------------+
| 1 | SC | John Doe | john@doe.me, jdoe@mail.org | SC, EC |
| 2 | SC | Richard Rowe | rowe@mail.us | SC, EC, HR |
| 3 | SC | San Zhang | zhangsan@mail.cn | SC, HR |
| 4 | SC | Taro Yamada | yamada@mail.jp | SC, EC, HR |
+----+-------+--------------+----------------------------+------------+
非常感谢您的回答!我很擅长制作真正的应用程序,我觉得这应该是一个非常常见的任务。任何有关指向正确资源的帮助都非常受欢迎!
- 更新:SQLfiddle链接:http://www.sqlfiddle.com/#!9/bc08de/40
答案 0 :(得分:0)
http://www.sqlfiddle.com/#!9/bc08de/14/0我不太清楚MySQL中的语法,但我已经尝试了这个并得到了这个结果。 1的id有重复。也许是因为一些语法。看看吧 得到了理想的结果。