SQL 将连接的结果连接到列中

Posted

技术标签:

【中文标题】SQL 将连接的结果连接到列中【英文标题】:SQL Concatenate Joined Results into Column 【发布时间】:2014-10-17 08:08:52 【问题描述】:

我有两张桌子:

Table1:
id (uniqueidentifier, primarykey)
title (varchar(50))

Table2:
id (uniqueidentifier, primarykey)
table1id (uniqueidentifier, foreignkey to table1)
category (varchar(50))

我还有以下 SQL 可以将 Table1 中的所有结果以及 Table2 中的所有相应类别返回给我。

select t1.*, t2.category as cat from table1 as t1
left join table2 as t2 on t1.id = t2.table1id

问题是,类别可能有多个结果,那么如何用逗号将它们连接到cat 的列中?

例如,Table2 可能包含以下数据:

Table2 row 1:
id = 1
table1id = 1
category = "abc"

Table2 row 2:
id = 2
table1id = 1
category = "def"

查看两条记录如何具有相同的table1idcategory 的值不同。

如何通过逗号连接两个(或多个)潜在值并将其作为单个字符串返回到上述查询的结果列 cat

Desired output:
t1.id = 1
t1.title = table1 title
cat = abc, def

【问题讨论】:

Can I concatenate multiple mysql rows into one field? 的可能重复项 【参考方案1】:

t2.category 上使用group_concat,并按您要选择的其他列进行分组。

select t1.id, t1.title, group_concat(t2.category) as cat from table1 as t1
left join table2 as t2 on t1.id = t2.table1id
group by t1.id, t1.title

【讨论】:

谢谢,但它似乎没有分组(即它没有删除重复项)。例如,它显示IE8122014-PHL6,IE8122014-PHL6,IE8122014-PHL6。如何删除这些重复项,并且每行只显示一次类别? 编辑:我试过group_concat(DISTINCT t2.category),它工作正常每***.com/questions/4561650/…

以上是关于SQL 将连接的结果连接到列中的主要内容,如果未能解决你的问题,请参考以下文章

MS Access sql将5个表与列中的奇怪字符分组

Sql Server如何使用date数据类型将日期插入到列中

如何将多个列值连接到 Pandas 数据框中的单个列中

将多个值添加到列中 - Pandas

将 regexp_replace 连接到 listagg:结果太长(SQL 错误:ORA-01489)

将数据集参数添加到列中,以便稍后通过 DataPrep 在 BigQuery 中使用它们