mysql - 如何合并两个连接表中的行?

标签 mysql sql

有两个表,可以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

Working SQL fiddle

关于mysql - 如何合并两个连接表中的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50668975/

相关文章:

sql - 使我的 SSIS 包可移植 - 如何做到这一点?

sql - Oracle - 如何使varchar类型的自动增量列?

mysql - 如何正确格式化重叠的 mySQL IN 和 NOT IN 条件

python - 如何加快 MySQL (InnoDB) 插入速度?

mysql - 表示具有可变长度类别和子类别的实体

mysql 从工作 "prepare"语句创建 View

sql - 无法更改 SQL Server 2008 中的表设计

sql - SAS - 创建增量表

PHP 调用另一个 PHP 页面进行 MySQL 查询(返回 JSON 数据)

java - MySQL - Hibernate 不创建外键约束