有两个表,可以连接,关系是1 to many
。我希望结果行被合并。
例如:
表1:联系人
.------------.----------.
| contact_id | username |
:------------+----------:
| 1 | user1 |
:------------+----------:
| 2 | user2 |
:------------+----------:
| 3 | user3 |
'------------'----------'
表2:文档
.-------------.------------.----------.
| document_id | contact_id | filename |
:-------------+------------+----------:
| 1 | 1 | abc.txt |
:-------------+------------+----------:
| 2 | 1 | bcd.txt |
:-------------+------------+----------:
| 3 | 1 | cde.txt |
:-------------+------------+----------:
| 4 | 2 | 123,txt |
:-------------+------------+----------:
| 5 | 2 | 234.txt |
:-------------+------------+----------:
| 6 | 3 | xyz.txt |
'-------------'------------'----------'
我希望我能得到的结果是:
.------------.----------.---------------------------.
| contact_id | username | filenames |
:------------+----------+---------------------------:
| 1 | user1 | abc.txt, bcd.txt, cde.txt |
:------------+----------+---------------------------:
| 2 | user2 | 123.txt, 234.txt |
:------------+----------+---------------------------:
| 3 | user3 | xyz.txt |
'------------'----------'---------------------------'
更新:
SELECT c.contact_id, c.username, GROUP_CONCAT(d.filename) as filenames
FROM contacts c
LEFT JOIN documents d
ON c.contact_id = d.contact_id
GROUP BY c.contact_id
发布于 2018-06-04 01:35:05
你真的应该把你的尝试和你的问题放在一起,这样我们就可以看到你尝试了什么。这样,就很容易推动你朝着正确的方向前进,并给我们其他人留下这样的印象,即你在提出问题之前已经在这件事上付出了一些努力。Stackoverflow不是编码服务。
为了回答你的问题,
在本例中,您希望在两个表上执行INNER JOIN
,并在SELECT
语句中包含MYSQL函数GROUP_CONCAT();
。
当您查看两个表时,您有一个一致的id (contact_id),您应该在INNER JOIN
中使用它将两个表链接在一起。
最后,您需要执行GROUP BY
来相应地对结果进行分组,即按contact_id对结果进行分组。
您的SQL将如下所示:
SELECT
tbl_contacts.contact_id,
tbl_contacts.username,
GROUP_CONCAT(tbl_documents.filename) as file_name
FROM
tbl_contacts
INNER JOIN
tbl_documents ON tbl_contacts.contact_id = tbl_documents.contact_id
GROUP BY
tbl_contacts.contact_id
https://stackoverflow.com/questions/50668975
复制相似问题