如何使用CASE语句筛选指定结果?WHERE条件查询结果异常求助
解决方案
方法一:直接组合WHERE条件(推荐)
这是最简洁高效的写法,直接通过逻辑运算符匹配需求:
WHERE ENTRY_MDE LIKE '09%' OR (ENTRY_MDE LIKE '08%' AND pin != 1)
逻辑说明:
ENTRY_MDE LIKE '09%':保留所有以09开头的记录,不受pin值限制(ENTRY_MDE LIKE '08%' AND pin != 1):保留以08开头但pin不等于1的记录,自动排除ENTRY_MDE LIKE '08%' AND pin=1的情况
方法二:使用CASE语句实现
如果必须用CASE语句,可在WHERE子句中通过CASE返回的标识值过滤:
WHERE CASE WHEN ENTRY_MDE LIKE '09%' THEN 1 WHEN ENTRY_MDE LIKE '08%' AND pin != 1 THEN 1 ELSE 0 END = 1
原查询的问题分析
原查询where(ENTRY_MDE like '09%' or ENTRY_MDE like '08%' ) and(entry mode like '08%' and pin=0)存在逻辑错误:
- 后面的
and(entry mode like '08%' and pin=0)会过滤掉所有以09开头的记录,违背需求 - 仅保留了08开头且pin=0的记录,既没覆盖08开头pin为其他非1值的情况,也没排除pin=1的情况
内容的提问来源于stack exchange,提问作者Sheetal
相关产品推荐
相关产品推荐

