2010-09-10 49 views
1

有兩個表之間有一個鏈接表。在單個mysql查詢中,從一個表中選擇多個行,每個行包含鏈接表中的多個行


USERS 
+-------+---------+ 
| userID| Username| 
+-------+---------+ 
|  1 | Nate | 
|  2 | Nic | 
|  3 | John | 
+-------+---------+ 

SITES 
+--------+---------+ 
| siteID | Site | 
+--------+---------+ 
|  1 | art | 
|  2 | com | 
|  3 | web | 
+--------+---------+ 

USER_SITES 
+-------------+---------+---------+ 
| user_site_id| user_id | site_id | 
+-------------+---------+---------+ 
|  1  | 1  | 1  | 
|  2  | 1  | 2  | 
|  3  | 1  | 3  | 
|  4  | 2  | 2  | 
|  5  | 2  | 3  | 
+-------------+---------+---------+ 

我想要做一個查詢,將這樣的


USERS 
+---------+----------------+ 
| username| sites   | 
+---------+----------------+ 
| Nate | art, com, web | 
| Nic | com, web  | 
+---------+----------------+ 

輸出可以在很容易地使用一個查詢做了什麼? 我希望能夠在MySQL和POSTgreSQL中做到這一點 - 但我會盡我所能!

回答

2

它可以在MySQL中使用GROUP_CONCAT來完成:

SELECT 
    username, 
    GROUP_CONCAT(Site ORDER BY Site SEPARATOR ', ') AS sites 
FROM USER_SITES 
JOIN USERS ON USER_SITES.user_id = USERS.userID 
JOIN SITES ON USER_SITES.site_id = SITES.siteID 
GROUP BY username 

結果:

 
+---------------------------+ 
| username | sites   | 
+---------------------------+ 
| Nate  | art, com, web | 
| Nic  | com, web  | 
+---------------------------+ 

要了解如何在PostgreSQL的模擬GROUP_CONCAT看到這個問題:

+0

非常感謝您的回答。雖然,我仍然在尋找一個postgresql的答案 - 這是儘可能接近我得到:http://mssql-to-postgresql.blogspot.com/2007/12/cool-groupconcat.html – 2010-09-10 20:41:32

+0

謝謝你,謝謝你,我我已經得到了postgre的答案,起初我沒有看到你的鏈接 – 2010-09-10 21:02:40

相關問題