2010-09-10 61 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

相关问题