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

SQL WHERE子句添加OR条件后Jurisdiction筛选失效问题

问题根因

SQL中AND运算符的执行优先级高于OR,原查询的WHERE条件实际被解析为以下逻辑:

满足「Jurisdiction以Sector 5开头、响应时间在2022年1月1日之后、Problem为Building / Security Check-LCL」,或者 Problem为Park and Walk-LCL的所有记录
这就导致只要Problem匹配第二个值,不管Jurisdiction和时间是否符合要求都会被返回,和预期的「Sector 5管辖范围+时间范围+两个Problem任意匹配」的逻辑不符。

修改方案

将所有通过OR关联的Problem匹配条件用圆括号包裹,使其成为一个独立的筛选整体,再和Jurisdiction、Response_Date的筛选条件做AND关联即可。

保留原LIKE写法的修正SQL

SELECT TOP (100000) [Master_Incident_Number]
      ,[Response_Date]
      ,[Problem]
      ,[Location_Name]
      ,[Address]
      ,[Apartment]
      ,[City]
      ,[Jurisdiction]
      ,[MethodOfCallRcvd]
      ,[Call_Disposition]
      ,[CallTaking_Performed_By]
      ,[CallClosing_Performed_By]
FROM [Reporting_System].[dbo].[Response_Master_Incident]  
WHERE Jurisdiction LIKE 'Sector 5%' 
  AND Response_Date >= '2022-01-01 00:00:00.000' 
  AND (
    Problem LIKE 'Building / Security Check-LCL' 
    OR Problem LIKE 'Park and Walk-LCL'
  )

优化写法

当前Problem的匹配规则没有带任何通配符(%、_等),本质是精确匹配,这种场景直接用IN替换多个OR LIKE,可读性和执行效率都更高:

SELECT TOP (100000) [Master_Incident_Number]
      ,[Response_Date]
      ,[Problem]
      ,[Location_Name]
      ,[Address]
      ,[Apartment]
      ,[City]
      ,[Jurisdiction]
      ,[MethodOfCallRcvd]
      ,[Call_Disposition]
      ,[CallTaking_Performed_By]
      ,[CallClosing_Performed_By]
FROM [Reporting_System].[dbo].[Response_Master_Incident]  
WHERE Jurisdiction LIKE 'Sector 5%' 
  AND Response_Date >= '2022-01-01 00:00:00.000' 
  AND Problem IN (
    'Building / Security Check-LCL',
    'Park and Walk-LCL'
  )
编写SQL筛选条件的注意点
  • 混合使用AND和OR时,必须用圆括号明确OR关联条件的作用范围,避免运算符优先级导致的逻辑偏差
  • 没有通配符的LIKE等价于精确匹配=,这类场景优先使用=或IN,性能更优

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:24:24