如何基于多列比较两个不同的表?

问题描述 投票:1回答:2

第一个表由具有状态和国家/地区信息的帐户组成,这些信息大多数是正确的,错误行很少

ID       Account       State         Country      Text
1001      Acc1          NJ           USA
1002      Acc2          NY           Null
1003      Acc3          Texas        Japan

我有第二个表,它具有正确的状态和国家信息,第一个表需要与之比较:

ID         State          Country
1          NJ              USA
2          NY              USA
3          Texas           USA    

查询应该检查:

  1. 如果第一个表中的状态存在于第二个表中
  2. 是否与正确的国家/地区相关联。

如果满足上述两个条件,则应使用状态值更新第一个表的Text列。如果不满足这两个条件中的任何一个,则text列应保持为空。因此结果应如下所示:

ID      Account      State     Country       Text
1001     Acc1         NJ         USA          NJ
1002     Acc2         NY         USA           
1003     Acc3         Texas      USA      

我能够检查两个条件是否都满足,我也能够得到不满足条件的行。但是,我不确定如何继续使用正确的状态更新表。任何帮助都非常感谢。

sql sql-server sql-server-2008
2个回答
3
投票

你可以试试这个。

UPDATE T1
SET 
    [Text] = (CASE WHEN T1.Country = T2.Country THEN T1.[State] ELSE NULL END)
    , Country = (CASE WHEN T1.Country = T2.Country THEN T1.Country ELSE T2.Country END) 
FROM TableAccounts T1
INNER JOIN TableCountry T2 ON T1.[State] = T2.[State]

4
投票

这些查询将与MSSQL一起用于驱动任一方向的更新...

SELECT State, Country FROM t1
EXCEPT
SELECT State, Country FROM t2

SELECT State, Country FROM t2
EXCEPT
SELECT State, Country FROM t1

t1 is this in your post: (ID,Account,State,Country,Text)
t2 is this in your post: (ID,State,Country)
© www.soinside.com 2019 - 2024. All rights reserved.