如何从不同的表SQL Server添加两个字符串列?

时间:2019-06-13 19:13:24

标签: sql sql-server string

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

table1拥有我需要的所有数据,我仅引用table2以获得描述。

例如,表1具有列:

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

尽管这样做确实将各列加在一起,但由于某种原因,由于某些原因,它还会产生很多重复的行。

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

4 个答案:

答案 0 :(得分:1)

在第二张表为null的情况下使用合并,在避免重复的情况下使用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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

使用“左联接”,您将获得表A中的值,而表B中可能不存在这些值。要消除重复项,您可以尝试

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

OR

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

答案 3 :(得分:1)

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

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