2017-01-16 61 views
1

我有两个表(如下所示),我需要根据表2中的语言更新table1的列。如何根据不同条件使用另一个表中的值更新表

像这样的东西(但它不是有效的语法):

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 
+1

语法是'UPDATE ... FROM ... WHERE'。 –

回答

1

使用CASE每一列,返回的加盟说明如果语言相匹配,或自我(即没有变化),如果没有正确的语言:

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 

此加入每一种语言到行,但只适当时进行更改。

+0

谢谢。这真的很有帮助,我确实看到了结果进入两栏。 ID \t Description_En \t Description_FR 的英文说明1 \t \t描述法国2 的英文说明3 – lisa

+0

@lisa所以,它的工作原理?我不确定你想在评论的最后部分告诉我什么。 – Bohemian

+0

对不起,它不允许我刚刚编辑...谢谢。这真的很有帮助。 'Description_EN'和'Description_EN'列都有值。但是并不是所有的值都从表2中引入到表1.我查询了Table2的“语言”列中是否有任何记录的值不是“EN”或'FR',我没有。因此,在新更新的table1 description_XX列中不应该有任何空记录。我感到困惑,任何想法可能是为什么? – lisa

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之一。

+0

为什么我们需要“左连接”。 –

+0

@Prdp嘿,如果我知道,我只是复制他的'JOIN'。 – Siyual

+0

有一个错字。修复它希望你不介意 –

相关问题