添加来自不同表的两个字符串列

Posted

技术标签:

【中文标题】添加来自不同表的两个字符串列【英文标题】:Add two string columns from different tables 【发布时间】:2019-06-13 19:13:24 【问题描述】:

我正在尝试将 char 数据类型的两列添加在一起,以便将它们的代码与描述结合起来。

table1 有我需要的所有数据,我只是引用 table2 来获取描述。

例如,table1 有列:

Code

1
2

表 2 有列:

Code      Description

1         Football
2         Soccer

我基本上是在尝试编写一个可以显示一列的查询

1 - Football
2 - Soccer

我试过了:

SELECT 
    a.Code + ' - ' + b.Description
FROM table1 a
LEFT JOIN table2 b
ON a.Code = b.Code

虽然这确实将列添加在一起,但由于某种原因,它也会生成很多重复的行,我假设是因为 LEFT JOIN。

基本上我只是想要 table1 中的任何代码,以匹配 table2 中的代码并带来该描述。

【问题讨论】:

您在cmets中说您使用的是2008。是时候升级mate了。距离该产品完全不再受支持还有不到一个月的时间。 【参考方案1】:

使用左连接,您可以获得表 A 中可能不存在于表 B 中的值。要消除重复项,您可以尝试

SELECT DISTINCT
    a.Code + ' - ' + b.Description
FROM table1 a
LEFT JOIN table2 b
ON a.Code = b.Code

SELECT 
    a.Code + ' - ' + b.Description
FROM table1 a
LEFT JOIN table2 b
ON a.Code = b.Code
GROUP BY a.Code, b.Description

【讨论】:

我能够弄清楚为什么它返回了这么多行。我没有意识到代码也链接到其他值,所以我不得不在我的 WHERE 子句中添加另一个过滤器来排除这些值。我使用了您建议的第二部分以及我编辑的 WHERE 子句来排除多余的行。【参考方案2】:

您可以使用ISNULL 处理 table2 中的缺失值:

SELECT 
    a.Code + ISNULL(' - ' + b.Description, '')
FROM table1 a
LEFT JOIN table2 b
ON a.Code = b.Code

【讨论】:

【参考方案3】:

在第二张表为空的情况下使用合并,并在避免重复的情况下使用distinct

SELECT distinct a.Code +' - ' + coalesce(b.Description,'')
FROM table1 a
LEFT JOIN table2 b
ON a.Code = b.Code

or try like below and i dont think you needed join you can do it just by using 2nd tabale
SELECT 
    b.Code ||' - ' || b.Description)
from
table2 b

【讨论】:

我在 SQL Server 2008 上,所以我相信当我尝试 CONCAT 时它还不支持,因为它说它不是一个可识别的内置函数名称。【参考方案4】:

table1和table2是什么关系?我看到上述查询返回重复项的唯一方法是:如果 table1 和 table2 之间的关系是 1:Many。意思是table1中的一行可以匹配table2中的多行。

    是否需要获取table1中存在的代码,即使它在table2中没有对应的描述?如果是这样,请使用如下所示的 LEFT JOIN。 如果 table2 有直接重复项,则使用 DISTINCT 将删除 在最终结果中重复:
    SELECT DISTINCT
           a.Code + ' - ' + COALESCE(b.Description, '')
    FROM table1 a
         LEFT JOIN table2 b
           ON a.Code = b.Code;
    
    如果一个代码在表 2 中有多个不同的描述,那么您的 最终结果集预计会有多行用于相同的代码 但通过运行上述查询具有不同的描述,因为 表中数据的性质。 是否只有在table2中有对应的描述时才需要获取table1中存在的代码?如果是这样,请使用如下所示的 INNER JOIN。
    SELECT DISTINCT
           a.Code + ' - ' + b.Description
    FROM table1 a
         INNER JOIN table2 b
           ON a.Code = b.Code;
    

【讨论】:

以上是关于添加来自不同表的两个字符串列的主要内容,如果未能解决你的问题,请参考以下文章

pandas - 合并字符串列不起作用(错误?)

Oracle:比较两个不同表中没有主键的字符串列以查找匹配/不匹配的字符串

从 databricks 表的字符串列中收集用户信息(电子邮件、IP 地址等)

使用pyspark将两个字符串列值连接到整数数组

无法使用 Keras 和 Sklearn 将字符串列转换为分类矩阵

将来自两个选择查询的数据添加到一个表中,这些查询针对来自两个不同表的不同列数