根据TableB中的值更新TableA值(多个选项)

时间:2018-07-04 13:51:56

标签: sql-server sql-server-2008

我有两个表:

           TableA
+************************************+
|Col1   | code    | Country | Value2 |
+************************************+
|Field1 | IN      | INDIA   | NA     |
|Field2 | CA      | CANADA  | NA     |
|Field3 | US      | USA     | NA     |
+************************************+

        TableB
+***************************+
|Field1  | Field2  | Field3 |
+***************************+
|1       | 4       |   IN   |
|2       | 5       |   CA   |
|3       | 6       |   -    |
+***************************+

我正在尝试根据Field3TableB列中的值来更新Country中的列TableA

也就是说:如果Field3中的TableB的值为IN,则应该将其更新为India

或如果Filed3的值为CA,则应将其更新为Canada

在第三种情况下,如果不存在匹配值,则应将其更新为“ NA”或“ NotSpecified”

到目前为止,我已经尝试使用TableB更新INNER JOIN

UPDATE TableB SET TableB.Field3 = TableA.Country
FROM TableB INNER JOIN TableA ON TableB.Field3 = TableA.Code

我真的在根据多个IF语句更新表吗?我应该使用CASE吗?

任何帮助或建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

LEFT JOINISNULL一起使用。

UPDATE TableB SET 
    Field3 = ISNULL(TableA.Country, 'NA')
FROM 
    TableB 
    LEFT JOIN TableA ON TableB.Field3 = TableA.Code

使用LEFT JOIN不会强制所有TableB记录加入到TableA记录中,并且ISNULL将设置默认值,以防{{1 }}在Code上不存在。