多条件SQL否定查询问题:老旧SQL环境下的替代实现方案
老旧SQL环境下的数据集过滤解决方案
原始数据
COLUMN A | COLUMN B TRA | ORIG TRA | ORIG TERM | _N TRA | ORIG ORIG-REV1| _N ORIG-REV2| _N
需求
需要过滤掉满足 COLUMN B='_N' AND COLUMN A IN ('ORIG-REV1','ORIG-REV2') 的记录,最终期望得到以下结果:
COLUMN A | COLUMN B TRA | ORIG TRA | ORIG TERM | _N TRA | ORIG
现有条件的问题
当前使用的过滤条件 COLUMN B<>'_N' AND (COLUMN A<>'ORIG-REV1' OR COLUMN A<>'ORIG-REV2') 错误排除了 COLUMN A=TERM 且 COLUMN B='_N' 的合法记录,且由于SQL环境老旧,无法使用NOT运算符,仅支持=、<>、>、<、OR、IN、LIKE这些基础运算符。
可行的替代条件
使用以下条件即可正确实现需求:
COLUMN B<>'_N' OR (COLUMN B='_N' AND COLUMN A<>'ORIG-REV1' AND COLUMN A<>'ORIG-REV2')
逻辑说明
- 第一部分
COLUMN B<>'_N':保留所有COLUMN B不为_N的记录,包含所有TRA相关的有效记录; - 第二部分
(COLUMN B='_N' AND COLUMN A<>'ORIG-REV1' AND COLUMN A<>'ORIG-REV2'):专门保留COLUMN B为_N但COLUMN A既不是ORIG-REV1也不是ORIG-REV2的记录,覆盖了TERM那条需要保留的记录; - 通过
OR连接两部分,刚好覆盖所有需要保留的记录,同时精准过滤掉ORIG-REV1、ORIG-REV2且COLUMN B='_N'的目标记录。
内容的提问来源于stack exchange,提问作者macieira
相关产品推荐
相关产品推荐

