DB2 SQL多字段行过滤:DLS_RBM_RBI表查询条件编写咨询
DB2 SQL查询条件编写方案
需求梳理
针对DLS_RBM_RBI表,需要筛选满足以下逻辑的记录:
- RBM_3_CD必须为空
- 当RBM_3_CD为空时,RBM_2_CD必须为'1';若RBM_2_CD也为空,则RBM_1_CD必须为'1'
你的代码问题
你尝试的WHERE子句逻辑存在错误:
AND (D.RBM_3_CD = '') OR (D.RBM_3_CD = '' AND D.RBM_2_CD = '1') OR (D.RBM_3_CD = '' AND RBM_2_CD = '' AND RBM_1_CD = '1')
这里用OR连接三个条件,第一个条件会直接把所有RBM_3_CD为空的记录筛选出来,完全忽略了后两个条件的限制,不符合你要求的第2、3条规则。
正确实现方式
这些属于行过滤条件,应该放在WHERE子句中,用逻辑运算符(AND/OR)组合即可,不需要使用IF或CASE(CASE多用于生成计算列,而非行过滤)。正确的SQL如下:
SELECT * FROM DLS_RBM_RBI D WHERE D.RBM_3_CD = '' AND ( D.RBM_2_CD = '1' OR (D.RBM_2_CD = '' AND D.RBM_1_CD = '1') )
逻辑说明
- 外层
D.RBM_3_CD = ''确保所有筛选记录都满足第一个基础条件 - 内层括号包含两个合法分支:
- 分支1:RBM_2_CD为'1'(匹配需求第2条)
- 分支2:RBM_2_CD为空且RBM_1_CD为'1'(匹配需求第3条)
两个分支用OR连接,覆盖了RBM_3_CD为空时的所有合法场景。
内容的提问来源于stack exchange,提问作者MikeG
相关产品推荐
相关产品推荐

