一尘不染

SQL Server:IF EXISTS;别的

sql

我有一张桌子

ID value
 1  100
 2  101
 2  444
 3  501

也是TableB

ID Code
1
2

现在,如果表A中存在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,coz ID = 4不存在!


阅读 150

收藏
2021-03-17

共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上运行的优点。

2021-03-17