3 つのテーブルがあります。他の 2 つのテーブルからデータを計算して、3 番目のテーブルの列を更新する必要があります。
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;
このクエリは正常に機能し、3 番目のテーブル列を更新しますが、次のような IN 演算子を指定すると:
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);
これは失敗し、このメッセージが表示されます
サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。ステートメントは終了されました。
これは、サブクエリが複数の行を返すためだとわかっていますが、このシナリオをどのように処理できますか? ヒント/考えは役に立ちます。
複数の ID を更新するにはどうすればよいですか? すなわち。ID 100 によって返される選択クエリの値は、3 番目のテーブルの ID 100 に対して更新する必要があります。ID 101 についても同様です。
また、この sum(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);