You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中CASE语句内IN子句结果与预期相反的原因分析

问题原因与修正方案

你的SQL语句里的CASE表达式使用错误,导致逻辑完全反转。

错误根源

你用了简单CASE表达式的语法结构(CASE 列名 WHEN ...),但在WHEN后面写了一个条件判断id_Proof in('Passport','PAN')。这种写法会把id_Proof的值和这个条件的布尔结果(TRUE/FALSE)做等值比较,而字符串和布尔值的隐式转换逻辑会导致:

  • 当id_Proof是'Passport'或'PAN'时,条件id_Proof in(...)结果为TRUE,此时id_Proof(字符串)和TRUE(布尔值)无法匹配,所以会走到ELSE分支返回原id_Proof;
  • 当id_Proof是其他值时,条件结果为FALSE,同样无法匹配,最终出现和预期相反的结果。

正确写法

有两种修正方式:

方式1:使用搜索CASE表达式(推荐,逻辑更清晰)

去掉CASE后面的id_Proof,直接在每个WHEN里写条件:

select AccountNO,id_Proof,
       CASE
        when id_Proof in('Passport','PAN') then 'P'
        else id_Proof
       end as abc  
from customer2;

方式2:修正简单CASE表达式的写法

如果坚持用简单CASE,需要把每个匹配值单独写WHEN:

select AccountNO,id_Proof,
       CASE id_Proof
        when 'Passport' then 'P'
        when 'PAN' then 'P'
        else id_Proof
       end as abc  
from customer2;

这两种写法都能实现你的预期:当id_Proof是'Passport'或'PAN'时返回'P',否则返回原字段值。

内容的提问来源于stack exchange,提问作者kiran borhade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 09:26:01