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

SQL WHERE子句多CASE条件问题:非指定AGE无数据返回

解决SQL条件约束的逻辑问题

你的问题出在CASE语句的逻辑上:当AGE不等于'18'时,CASE没有指定ELSE分支,会默认返回NULL。而NULL = 1的结果是FALSE,导致整个WHERE条件不成立,所以这部分数据被过滤掉了。

以下两种方案都能解决你的需求:

方案一:用逻辑表达式直接拆分(推荐)

这种写法逻辑更直观,可读性更强:

SELECT
    COLUMN_NAME
FROM
    TABLE
WHERE 
    NAME_COLUMN = 'NAME'
    AND (
        AGE != '18'
        OR (ADULTHOOLD_COLUMN = 1 AND ADULTHOOLD_COLUMN_1 = 1)
    )

逻辑说明:

  • 当AGE不等于'18'时,只需要满足NAME_COLUMN = 'NAME'即可返回数据
  • 当AGE等于'18'时,必须同时满足ADULTHOOLD_COLUMN = 1和ADULTHOOLD_COLUMN_1 = 1

方案二:修改CASE语句添加ELSE分支

给CASE加上ELSE 1,让非18岁的行在这两个条件上自动满足:

SELECT
    COLUMN_NAME
FROM
    TABLE
WHERE 
    NAME_COLUMN = 'NAME'
    AND
    CASE
        WHEN AGE = '18' THEN ADULTHOOLD_COLUMN
        ELSE 1
    END = 1
    AND
    CASE
        WHEN AGE = '18' THEN ADULTHOOLD_COLUMN_1
        ELSE 1
    END = 1

逻辑说明:

  • 当AGE等于'18'时,用ADULTHOOLD_COLUMN和ADULTHOOLD_COLUMN_1的值参与判断
  • 当AGE不等于'18'时,CASE返回1,和后面的=1条件匹配,不会过滤掉这些行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:05:21