2017-01-16 6 views
1

私は2つのテーブルを持っていますが、table2の値をtable2の値に変更する必要があります。異なる条件に基づいて別のテーブルの値でテーブルを更新する方法

このような何か(ただし、その有効でない構文):

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

ありがとうございます。本当に役に立ちましたが、結果が両方の列に表示されています。 、それはフランスの2のid \t Description_En \t Description_FR 英語1で説明\t \t説明ので、英語の3 – lisa

+0

@lisaで説明動作しますか?私はあなたのコメントの最後の部分で私に教えようとしているものがわからない。 – Bohemian

+0

申し訳ありませんが、今編集することはできませんでした...ありがとうございました。本当に役に立ちました。 'Description_EN'列と 'Description_EN'列の両方に値が入っていますが、すべての値が表2から表1に持ち込まれるわけではありません。Table2の 'Language'列に '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 

LanguageENであるかどうかを確認し、その値を更新します。それ以外の場合は、それ自体と同じに設定されます。

FRの場合も同様です。

+0

なぜ左結合が必要なのですか? –

+0

@Prdpもし私が知っていれば、私はちょうど彼のJOINをコピーしています。 – Siyual

+0

タイプミスがありました。あなたが気にしないことを願っていた –

関連する問題