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

SQL CASE WHEN语句实现多值过滤的问题求助

解决下拉选值对应SQL过滤program字段的问题

原SQL语句的问题在于CASE表达式只能返回单个值,无法直接在THEN子句中写'toto' OR 'titi'这类逻辑,导致语句无法正常执行。以下是几种可行的解决办法:

方法一:拆分WHERE条件(最直观)

直接针对每个下拉选项编写对应的过滤逻辑,逻辑清晰且易维护:

SELECT DISTINCT * 
FROM database
WHERE 
    (selection = 'X' AND "program" = 'tata')
    OR (selection = 'Y' AND "program" IN ('toto', 'titi'))
    OR (selection = 'Z' AND "program" = 'tutu')

方法二:使用匹配组合列表

将每个合法的「选值-program」组合列出来,通过IN子句匹配:

SELECT DISTINCT * 
FROM database
WHERE 
    ("program", selection) IN (
        ('tata', 'X'),
        ('toto', 'Y'),
        ('titi', 'Y'),
        ('tutu', 'Z')
    )

方法三:结合CASE与IN(保留CASE结构)

如果希望保留CASE的结构,可以调整为以下通用写法:

SELECT DISTINCT * 
FROM database
WHERE 
    "program" = CASE 
                    WHEN selection = 'X' THEN 'tata'
                    WHEN selection = 'Z' THEN 'tutu'
                END
    OR (selection = 'Y' AND "program" IN ('toto', 'titi'))

以上三种方法都能实现你需要的过滤逻辑,其中方法一和方法二的可读性与执行效率更优,适合大多数场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:40:05