小编Jel*_*ves的帖子

空结果集和 Case When = 1

我很确定这是一个隐式转换,但我无法找到有关它的信息。

假设我有这个 SQL:

SELECT
CASE WHEN (SELECT 1 WHERE (1=1)) = 1 THEN 1 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)

我的子查询返回一行,因此与 1 进行比较。这导致我的 CASE WHEN 产生 1 输出。

即使我将子查询设置为不返回如下示例所示的行,CASE 语句也会返回 0 结果:

SELECT
CASE WHEN (SELECT 1 WHERE (1=0)) = 1 THEN 1 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)
  • SQL 解释器是否在“空集”到 0 或 1 之间进行转换?
  • 使用这种类型的比较让我感到不舒服。以我的拙见,最好像这样使用 EXISTS:

    SELECT
    CASE WHEN EXISTS(SELECT 1 WHERE (1=1)) THEN 1 ELSE 0 END
    
    Run Code Online (Sandbox Code Playgroud)

如果我不使用 EXISTS 有什么优点或缺点吗?

sql-server case

2
推荐指数
1
解决办法
2万
查看次数

标签 统计

case ×1

sql-server ×1