如何根据不同的条件使用另一个表中的值更新表

时间:2017-01-16 15:38:00

标签: sql-server

我有两个表(如下所示),我需要根据表2中的语言更新table1&#39s的列。

像这样(但它的语法无效):

UPDATE Table1
If table2.language='EN'
  SET description_EN = Table2.Description
Else 
  SET description_FR=table2.description 
FROM table1
left outer join table2 on table1.id=table2.id

表1:

id  description_EN  Description_FR
1   null            null
2   null            null
3   null            null

表2:

id  Language    Description
1   EN          description in English 1
1   FR          description in French 1
2   EN          description in English 2
2   FR          description in French 2
3   EN          description in English 3
3   FR          description in French 3

2 个答案:

答案 0 :(得分:1)

对每列使用CASE,如果语言匹配则返回已连接的描述,如果不是正确的语言,则返回self(即无更改):

UPDATE Table1 SET
description_EN = CASE WHEN table2.language = 'EN' THEN Table2.Description else description_EN END,
description_FR = CASE WHEN table2.language = 'FR' THEN Table2.Description else description_FR END
FROM table1
JOIN table2 on table1.id = table2.id

这会将每种语言连接到该行,但只在适当时进行更改。

答案 1 :(得分:0)

您可以使用CASE声明执行此操作:

Update      T1
Set         description_EN = Case When T2.Language = 'EN'   
                Then T2.Description 
                Else T1.description_EN 
            End,
            description_FR = Case When T2.Language <> 'EN'  
                Then T2.Description 
                Else T1.description_FR 
            End 
From        Table1  T1
Left Join   Table2  T2  On  T1.Id = T2.Id

这会检查Language是否为EN并更新该值,否则会将其设置为等于自身。

同样适用于FR