テーブルAがあります:
ID value
1 100
2 101
2 444
3 501
表Bも
ID Code
1
2
ここで、テーブル A に ID = 2 が存在する場合、テーブル B の列 = コードを入力します。値が複数ある場合は、最大値を取得します。それ以外の場合は、'123' を入力します。ここで、私が使用したのは次のとおりです。
if exists (select MAX(value) from #A where id = 2)
BEGIN
update #B
set code = (select MAX(value) from #A where id = 2)
from #A
END
ELSE
update #B
set code = 123
from #B
BEGIN;END または IF EXIST;ELSE に何らかの問題があることは確かです。基本的に、IF 部分に select ステートメントが存在する場合は else 部分をバイパスし、その逆も実行したいのです。たとえば、IF= 部分の if select ステートメントは次のようになります。
(select MAX(value) from #A where id = 4)
ID = 4 が存在しないため、123 を入力する必要があります。
ベストアンサー1
編集
IF
ステートメントが機能しない理由を追加したいと思います。EXISTS
集計に対して を実行すると、常に になります。 が存在しないtrue
場合でも、値を返します。 確かに ですが、 が返されます。 代わりに、次のようにします。ID
NULL
if exists(select 1 from table where id = 4)
ELSE
そして、あなたの声明の部分に到達しますIF
。
ここで、より優れたセットベースのソリューションをご紹介します。
update b
set code = isnull(a.value, 123)
from #b b
left join (select id, max(value) from #a group by id) a
on b.id = a.id
where
b.id = yourid
これには、個々の ID ではなくテーブル全体で実行できるという利点があります。