有两个表,可以join,关系是1对多
。我希望合并结果行。
例如:
表 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
最佳答案
您真的应该发布您对问题的尝试,以便我们可以看到您的尝试。这样,就很容易将您推向正确的方向,并给我们其他人留下这样的印象,即您在提出问题之前已经为此事付出了一些努力。 Stackoverflow 不是编码服务。
回答你的问题,
在这种情况下,您想要做的是对两个表执行 INNER JOIN
,并让 MYSQL 函数 GROUP_CONCAT();
位于您的 SELECT
语句。
当您查看两个表时,您有一个连贯的 ID (contact_id),您应该在 INNER JOIN
中使用它来将两个表链接在一起。
然后,最后,您需要执行 GROUP BY
以相应地分组您的结果,即将结果分组 < em>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
关于mysql - 如何合并两个连接表中的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50668975/