SQL多列过滤AND/OR运算符使用问题:精准筛选指定数据
SQL查询条件修正方案
需求说明
需要提取满足以下所有核心条件的数据:
- Technology 等于 'IT',且 Date 在
2021-07-01至2022-09-10区间内 - 同时满足以下任一子条件:
- Modifier 为 'G11' 或 'G7'
- Service 为 'phys' 或 'oper'(需注意大小写匹配问题)
示例数据
Technology modifier Date service IT. 95. 2021-07-01. Phys Cse. G5. 2021-09-09. Tec Mech. GT. 2022-08-07. Tec IT. G11. 2022-09-06. Tec IT. G7. 2022-08-07. Oper IT. GR. 2022-06-26. Tec
预期提取结果
Technology modifier Date Service IT. 95. 2021-07-01. Phys IT. G11. 2022-09-06 Tec IT. G7. 2022-08-07. Oper
原SQL问题分析
你写的SQL语句中,OR 的优先级低于 AND,导致条件逻辑被拆解为:(Technology='IT' AND 日期符合) OR Modifier符合 OR Service符合,这会把非IT技术但Modifier/Service符合的数据也筛选出来,不符合需求。
修正后的SQL语句
WHERE Technology = 'IT' AND date BETWEEN '2021-07-01' AND '2022-09-10' AND ( Modifier IN ('G11', 'G7') OR LOWER(Service) IN ('phys', 'oper') )
修正说明
- 将所有子条件(Modifier、Service相关)用括号包裹,确保它们是一个整体判断单元
- 整体子条件与前面的
Technology='IT'和日期条件用AND连接,保证必须先满足核心的IT技术和日期范围要求 - 加入
LOWER(Service)是为了兼容示例数据中首字母大写的情况,避免因大小写不匹配漏掉数据
内容的提问来源于stack exchange,提问作者Maddy
相关产品推荐
相关产品推荐

