SQL Server: IF EXISTS ; ELSE 質問する

SQL Server: IF EXISTS ; ELSE 質問する

テーブル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場合でも、値を返します。 確かに ですが、 が返されます。 代わりに、次のようにします。IDNULL

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 ではなくテーブル全体で実行できるという利点があります。

おすすめ記事