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

如何编写多条件WHERE子句筛选DiagCodes表仅含指定编码的行?

问题描述

现有名为DiagCodes的表,数据如下:

Code1Code2Code3
101102null
101nullnull
102104null

需要编写SQL的WHERE子句,筛选出**所有非空列的编码都属于集合(101, 102)**的行——即仅返回第一、第二行,第三行因包含104(不在指定集合内)需排除。

解决方案

写法一:逐一校验列值(直观易读)

SELECT *
FROM DiagCodes
WHERE 
    (Code1 IN (101, 102) OR Code1 IS NULL)
    AND (Code2 IN (101, 102) OR Code2 IS NULL)
    AND (Code3 IN (101, 102) OR Code3 IS NULL);

逻辑:对每一列,要么值为null,要么属于指定集合,所有列满足该条件的行才会被保留。

写法二:反向排除不符合条件的行(适合列数较多的场景)

SELECT *
FROM DiagCodes
WHERE 
    NOT (
        (Code1 NOT IN (101, 102) AND Code1 IS NOT NULL)
        OR (Code2 NOT IN (101, 102) AND Code2 IS NOT NULL)
        OR (Code3 NOT IN (101, 102) AND Code3 IS NOT NULL)
    );

逻辑:排除存在任意非空列值不在指定集合内的行,剩余即为符合要求的行。

关键说明

必须显式处理NULL值:因为NULL IN (...)的结果为UNKNOWN,若忽略NULL判断会导致筛选逻辑异常,无法正确保留包含NULL的合法行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:15:57