SQL逻辑求助:筛选含指定值且排除特定值的MyTable记录
解决MyTable的筛选需求
没问题,我来帮你搞定这个SQL查询需求。先拆解一下你的要求:我们需要从MyTable里找出那些C1、C2、C3列的取值都属于111、222、444,同时绝对不能有任何一列包含333的记录。
对应的SQL查询语句
SELECT * FROM MyTable WHERE -- 第一步:排除任一列包含333的记录 C1 != 333 AND C2 != 333 AND C3 != 333 -- 第二步:确保C1、C2、C3的每个值都在目标集合里 AND C1 IN (111, 222, 444) AND C2 IN (111, 222, 444) AND C3 IN (111, 222, 444);
逻辑说明
- 排除333的条件:用
C1 !=333 AND C2 !=333 AND C3 !=333直接过滤掉所有带有333的记录,保证结果里没有任何一列是333。 - 限制取值范围:通过
IN条件约束三个列的取值只能是你指定的111、222、444,这样就确保了所有符合条件的记录,三个列的值都在目标集合内。
匹配的结果记录
根据你提供的原表数据,执行上述查询后会得到以下3条记录:
- ID: 4 | C1:444 | C2:111 | C3:222
- ID: 6 | C1:111 | C2:222 | C3:111
- ID:10 | C1:444 | C2:111 | C3:222
补充:如果需求是“至少有一列是目标值”
如果你的真实需求是记录中至少有一列是111/222/444,同时没有任何一列是333(而非所有列都属于目标值),可以用下面的查询:
SELECT * FROM MyTable WHERE C1 != 333 AND C2 != 333 AND C3 != 333 AND (C1 IN (111, 222, 444) OR C2 IN (111, 222, 444) OR C3 IN (111, 222, 444));
内容的提问来源于stack exchange,提问作者DB_G
相关产品推荐
相关产品推荐

