2012-05-11 14 views
4

私は3つのテーブルを持っているので、私は他の2つのテーブルからデータを計算して3番目のテーブルのカラムを更新する必要があります。複数のIDの更新ステートメント

update table3 set column3= 
(
select t2.column3+t1.column3 
from table2 t2 with (nolock) join table1 t1 
on table2.id=t1.id 
where table2.id= 100 
) 
where id= 100; 

このクエリは正常に動作し、それは私がこのような事業者における供給があれば、第三表の列を更新:

update table3 set column3= 
    (
    select t2.column3+t1.column3 
    from table2 t2 with (nolock) join table1 t1 
    on table2.id=t1.id 
    where table2.id IN (100,101) 
    ) 
    where id IN (100,101); 

これが失敗し、私はこのメッセージ

サブクエリがより多くを返さ取得1値。 =、!=、<、< =、>、> =、またはサブクエリが式として使用されている場合は、これは許可されません。 ステートメントが終了しました。

&サブクエリが1行以上を返しているため、このシナリオをどのように処理できますか?ヒント/考えが役立ちます。

複数IDの更新方法を教えてください。すなわち、 ID 100で返された選択クエリ値は、ID 101と同様に3番目のテーブル&のID 100に対して更新する必要があります。

また、この合計(t2.column3) - (t1.column3 + t1) .column2)

update table3 set column3= 
     (
     select sum(t2.column3)- (t1.column3 + t1.column2) 
     from table2 t2 with (nolock) join table1 t1 
     on table2.id=t1.id 
     where table2.id IN (100,101) 
     ) 
     where id IN (100,101); 
+0

あなたが正しいです、私は内側の条件を必要としません。 – Sharpeye500

答えて

6

あなたが返される結果にcolumn3を設定しようとしているためです、とSQLはその1つの値のみ(スカラー)であることを期待しています。 SQLエンジンは、複数の戻り値を渡すと混乱します(どちらが使用する必要がありますか?結果を反復することは想定していません)。したがって、結果セット全体を更新する場合は、サブテーブルを作成してそれを照会して結合する必要があります。あなたのクエリがtable3.idは、他のIDを一致していることをこの仮定の下で、よりこの

UPDATE Table3 
SET Column3 = subtable.value 
FROM Table3 
    JOIN (
     select t2.column3+t1.column3 as value, t1.id 
     from table2 t2 with (nolock) join table1 t1 
     on table2.id=t1.id 
     where table2.id IN (100,101) 
    ) AS subtable 
    ON subtable.id = Table3.id 
WHERE table3.id IN (100, 101) 

ようになっているはずです、あなたも本当にインナーwhere table2.id IN ...

1

あなたはまた、あなたのUPDATEtable3に参加すべきである必要はありません。これを試してみてください:

UPDATE t3 
SET column3 = t2.column3+t1.column3 
FROM table3 t3 
INNER JOIN table2 t2 WITH(NOLOCK) 
ON t3.id = t2.id 
INNER JOIN table1 t1 
ON t3.id=t1.id 
WHERE t3.id IN (100,101) 
+0

これは非常に近いです、私はこれを試しました、何とか私はこれを取得します。私はこのような合計をする必要があります 合計(t2.column3) - (t1.column3 + t1.column2) – Sharpeye500

関連する問題