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

CASE WHEN中能否使用IN运算符?SQL语法报错问题咨询

问题解答

语法可行性说明

你用到的这种IN子查询直接放在CASE WHEN条件中的写法,在部分SQL引擎(比如DB2,从DIGITS函数判断你大概率用的是这个)里是不被支持的,这就是报错Comparison operator IN not valid的原因。

解决方法

用EXISTS子查询替代IN,这是兼容性更好的写法,能绕过IN运算符的语法限制。修改后的SQL如下:

SELECT
    CASE 
        WHEN EXISTS (
            SELECT 1 
            FROM TABLE_2 
            WHERE DIGITS(C) || DIGITS(D) = DIGITS(A) || DIGITS(B)
        )
        THEN x
        ELSE y 
    END AS MY_VAR
FROM TABLE_1

逻辑说明

EXISTS子查询会检查TABLE_2中是否存在与当前TABLE_1记录的DIGITS(A)||DIGITS(B)匹配的DIGITS(C)||DIGITS(D)值,存在则返回TRUE,进入THEN分支,否则走ELSE分支,逻辑和你原来的IN写法完全一致,但能正常执行。

如果TABLE_2的拼接值存在大量重复,还可以提前用WITH子句去重后再关联,优化查询性能:

WITH TABLE_2_CONCAT AS (
    SELECT DISTINCT DIGITS(C) || DIGITS(D) AS CONCAT_VAL
    FROM TABLE_2
)
SELECT
    CASE 
        WHEN EXISTS (
            SELECT 1 
            FROM TABLE_2_CONCAT 
            WHERE CONCAT_VAL = DIGITS(A) || DIGITS(B)
        )
        THEN x
        ELSE y 
    END AS MY_VAR
FROM TABLE_1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:22:11