2017-06-26 5 views
0

SQLで1つの更新を行うだけで同じようにするにはどうすればよいですか?SQLのさまざまな条件に対して1つの更新を行う値をほとんど設定しない方法

UPDATE TableItem 
SET SomeValueN = t1.somevalue 
FROM TableItem t 
    INNER JOIN TableItem2 t2 ON some keys 
    LEFT JOIN TableItem1 t1 ON some keys AND t1.[Month] = month(t2.DateOfCreation) 
WHERE t.ItemID = $(some id) 

UPDATE TableItem 
SET SomeValueN1 = t1.somevalue 
FROM TableItem t 
    INNER JOIN TableItem2 t2 ON some keys 
    LEFT JOIN TableItem1 t1 ON some keys AND t1.[Month] = month(t2.DateOfCreation) + 1 
WHERE t.ItemID = $(some id) 

UPDATE TableItem 
SET SomeValueN2 = t1.somevalue 
FROM TableItem t 
    INNER JOIN TableItem2 t2 ON some keys 
    LEFT JOIN TableItem1 t1 ON some keys AND t1.[Month] = month(t2.DateOfCreation) + 2 
WHERE t.ItemID = $(some id) 

ご覧のとおり、私は異なる列の値を別の列に更新したいと思っています。 (英語のため申し訳ありません)

画像はあなたを助けることを願っています:

enter image description here

+0

質問のTableItem、TableItem1、TableItem2の3つのテーブルのテーブル構造を投稿してください。列を更新する条件の簡単な説明を追加します。 –

+0

@a_horse_with_no_name私はMicrosoft SQLを使用しています –

答えて

1

あなたは、サブクエリを実行することができます。

UPDATE TableItem t 
SET SomeValueN = (SELECT t1.somevalue 
     FROM TableItem2 t2 
     LEFT JOIN TableItem1 t1 ON 
      some keys AND t1.[Month] = month(t2.DateOfCreation) 
     WHERE some keys 
     ), 
    SomeValueN1 = (SELECT t1.somevalue 
     FROM TableItem2 t2 
     LEFT JOIN TableItem1 t1 ON 
      some keys AND t1.[Month] = month(t2.DateOfCreation) + 1 
     WHERE some keys 
     ) 
    SomeValueN1 = (SELECT t1.somevalue 
     FROM TableItem2 t2 
     LEFT JOIN TableItem1 t1 ON 
      some keys AND t1.[Month] = month(t2.DateOfCreation) + 2 
     WHERE some keys 
     ) 
WHERE t.ItemID = $(some id) 

SQLエンジンによっては、別の使用が必要になる場合があります各テーブルのエイリアス。

WHERE句のsome keysの部分には、t.item2Id=t2.idのようなTableItem tへの参照を含めることができます。

さらに詳しく知りたい場合は、DB構造と正確に達成することを期待してください。

+0

ありがとう、そのように私はまだ3回(平均結合とwhere文)を使用します –

+0

私は応答を更新しました – user3429660

関連する問題