簡體   English   中英

為GROUP_CONCAT建立一個SQL查詢,將多個一對多表

[英]Building an SQL query for GROUP_CONCAT-ing multiple one/many-to-many tables

我有四個表, personemailorganperson_organ以及:

  • personemail具有一對多關系;
  • personorgan通過person_organ具有多對多關系。

問題,如何編寫查詢,以便為一組特定器官的人提供一個包含full nameall emailall 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM