SQL WHERE子句条件调整需求咨询:排除STA_0='1'的NCC类型数据
调整WHERE子句以满足需求
首先,咱们先明确原语句的问题:你当前的WHERE子句因为逻辑运算符优先级的问题,导致OR条件没有和前面的AND条件关联起来。原语句的实际逻辑是:
(ACCDAT_0 >= '2020-01-01' AND STA_0='3' AND NUM_0 LIKE '%FTC%') OR NUM_0 LIKE '%NCC%' OR NUM_0 LIKE '%DCF%'
这就导致只要NUM_0匹配%NCC%或%DCF%,不管STA_0是什么值,都会被纳入结果,这就是STA_0='1'的NCC记录被选中的原因。
接下来是调整后的WHERE子句,完全满足你的需求:
WHERE -- 保留原有符合条件的记录:日期达标、状态为3,且NUM含FTC/DCF ( ACCDAT_0 >= '2020-01-01 00:00:00.000' AND STA_0 = '3' AND (NUM_0 LIKE '%FTC%' OR NUM_0 LIKE '%DCF%') ) -- 新增NCC规则:所有含NCC的记录,但排除STA=1的条目 OR ( NUM_0 LIKE '%NCC%' AND STA_0 != '1' )
逻辑拆解:
- 第一部分括号内是修正后的原有查询逻辑:把
NUM_0 LIKE '%FTC%' OR NUM_0 LIKE '%DCF%'包裹在括号里,确保这两个条件必须和ACCDAT_0、STA_0='3'同时满足,避免了原语句的逻辑漏洞。 - 第二部分专门处理NCC的需求:只要
NUM_0包含NCC,并且STA_0不等于1,就会被选中——这部分不受STA_0='3'和日期条件的限制(如果需要让NCC记录也满足日期要求,只需在这部分加上ACCDAT_0 >= '2020-01-01 00:00:00.000'即可)。
如果需要NCC记录也满足日期条件,调整后的语句如下:
WHERE ( ACCDAT_0 >= '2020-01-01 00:00:00.000' AND STA_0 = '3' AND (NUM_0 LIKE '%FTC%' OR NUM_0 LIKE '%DCF%') ) OR ( NUM_0 LIKE '%NCC%' AND STA_0 != '1' AND ACCDAT_0 >= '2020-01-01 00:00:00.000' )
内容的提问来源于stack exchange,提问作者Nuno Oliveira
相关产品推荐
相关产品推荐

