有两个表,它们之间有一个链接表。
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 中做到这一点——但我会尽我所能!
最佳答案
这可以在 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,请参阅以下问题:
关于php - 在单个 mysql 查询中,从一个表中选择多行,每行包含来自链接表的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3687809/