我很确定这是一个隐式转换,但我无法找到有关它的信息。
假设我有这个 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)
使用这种类型的比较让我感到不舒服。以我的拙见,最好像这样使用 EXISTS:
SELECT
CASE WHEN EXISTS(SELECT 1 WHERE (1=1)) THEN 1 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)如果我不使用 EXISTS 有什么优点或缺点吗?