我有一个表A:
ID value
1 100
2 101
2 444
3 501
还有表B
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,因为 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 上运行。
关于SQL Server : IF EXISTS ; ELSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7425146/