在SQL Server中按行比较两个不同表中的两个文本列

时间:2018-07-28 20:58:16

标签: sql sql-server string sql-server-2014

我有两个如下表:

data snapshot

现在,当第二张表的所有列都是第一张表的子集时,我希望第一张表中的amt列填充到第二张表中。 为了澄清起见,在此上面的示例中,由于表2的所有列都是表1的子集,但将填充第一行,而在最后一个'c4'与表1的元素(同一行)不匹配,因此该行“ amt”列将为空白。

我需要在SQL(Microsoft SQL Server 2014)中解决它

任何线索都会受到赞赏

1 个答案:

答案 0 :(得分:1)

我想这就是你想要的:

select t2.*, t1.amt
from table2 t2 left join
     table1 t1
     on (t2.a = t1.a or t2.a is null) and
        (t2.b = t1.b or t2.b is null) and
        (t2.c = t1.c or t2.c is null) and
        (t2.d = t1.d or t2.d is null);

您可以轻松地将其转换为更新:

update t2
    set amt = t1.amt
from table2 t2 left join
     table1 t1
     on (t2.a = t1.a or t2.a is null) and
        (t2.b = t1.b or t2.b is null) and
        (t2.c = t1.c or t2.c is null) and
        (t2.d = t1.d or t2.d is null);