2017-01-16 128 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

有一個錯字。修復它希望你不介意 –

相關問題