簡體   English   中英

SQL Server:IF EXISTS;其他

[英]SQL Server: IF EXISTS ; ELSE

我有一張桌子A:

ID value
 1  100
 2  101
 2  444
 3  501

表B

ID Code
1
2

現在,如果tableA中存在ID = 2,我想填充表B的col =代碼。 對於多個值,獲取最大值。 否則用'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 = part的select語句是:

(select MAX(value) from #A where id = 4)

它應該只填充123,因為ID = 4不存在!

編輯

我想補充你的IF語句似乎不起作用的原因。 當您對聚合進行EXISTS時,它總是true 即使ID不存在,它也會返回一個值。 當然,它是NULL ,但它返回它。 相反,這樣做:

if exists(select 1 from table where id = 4)

並且您將進入IF語句的ELSE部分。


現在,這是一個更好的,基於集合的解決方案:

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。

試試這個:

Update TableB Set
  Code = Coalesce(
    (Select Max(Value)
    From TableA 
    Where Id = b.Id), 123)
From TableB b

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM