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

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')
  )

逻辑说明

  1. 外层D.RBM_3_CD = ''确保所有筛选记录都满足第一个基础条件
  2. 内层括号包含两个合法分支:
    • 分支1:RBM_2_CD为'1'(匹配需求第2条)
    • 分支2:RBM_2_CD为空且RBM_1_CD为'1'(匹配需求第3条)
      两个分支用OR连接,覆盖了RBM_3_CD为空时的所有合法场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:41:42