[英]Building an SQL query for GROUP_CONCAT-ing multiple one/many-to-many tables
我有四個表, 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 |
+----+-------+--------------+----------------------------+
除了單一的“ Organ
字段,我想要的是將“ Organs
作為上述結果集的附加列:
+----+-------+--------------+----------------------------+------------+
| 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
http://www.sqlfiddle.com/#!9/bc08de/14/0我對MySQL的語法了解不多,但是我已經嘗試過並得到了這個結果。 ID為1的重復項。 也許是因為某些語法。 看看就得到了預期的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.