SQL Server : IF EXISTS ; ELSE

标签 sql sql-server if-statement exists

我有一个表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/

相关文章:

c# - 如何分析慢查询?

sql - 如何在 SQL Server 2012 中选择除一列之外的所有列?

Java boolean 值在 if 语句中不带断点

if-statement - IF语句-如何减少/简化源代码量

ruby-on-rails - Ruby if 语句 - 如何避免多个 elsif 语句,包括 not

java - 如何打印sql表中的所有值而不是仅第一行

sql - 使用select语句更新多行

SQL,删除级联和更新级联

sql - 在 MySQL 语句中使用 datediff

sql - 将日期范围与一组日期范围 SQL 进行比较