添加来自不同表的两个字符串列
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;
【讨论】:
以上是关于添加来自不同表的两个字符串列的主要内容,如果未能解决你的问题,请参考以下文章
Oracle:比较两个不同表中没有主键的字符串列以查找匹配/不匹配的字符串
从 databricks 表的字符串列中收集用户信息(电子邮件、IP 地址等)