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

多条件SQL DELETE语句AND/OR逻辑错误修正与正确写法

问题分析

原SQL存在两类错误,导致逻辑不符合预期:

  • 逻辑优先级错误:SQL中AND运算符优先级高于OR,未做分组的情况下,实际执行逻辑为(日期在指定区间 AND 姓名以an结尾) OR 姓名以An开头,所有姓名以An开头的记录无论出生日期是否符合要求都会被匹配。
  • 基础语法错误:
    • 日期常量未加单引号:2001-10-01会被解析为算术表达式(计算结果为1990),无法按日期值做比较
    • 通配符使用错误:SQL中匹配任意长度任意字符的通配符为%,原语句中使用的…、.不属于SQL通配符,无法实现模糊匹配
    • OR分支语法错误:OR 'An...'直接写字符串常量,在SQL布尔判断中非空字符串会被判定为真,等价于逻辑恒成立,会进一步扩大匹配范围。
正确实现方案

通过括号明确条件分组,修正所有语法错误,正确语句如下:

DELETE FROM people 
WHERE 
  `date` > '2001-10-01' 
  AND `date` < '2010-10-01' 
  AND (
    names LIKE '%an'
    OR names LIKE 'An%'
  );
注意事项
  • date是SQL标准保留关键字,建议用反引号包裹,避免不同数据库下的语法冲突
  • 日期值必须用单引号包裹,才能被正确解析为日期类型常量
  • 括号内的两个姓名条件为或关系,整体和外层的日期范围条件为且关系,完全匹配需求逻辑
  • 执行删除前强烈建议先替换为查询语句校验匹配结果,确认无错后再执行删除,避免误删:
-- 预校验查询语句
SELECT * FROM people 
WHERE 
  `date` > '2001-10-01' 
  AND `date` < '2010-10-01' 
  AND (
    names LIKE '%an'
    OR names LIKE 'An%'
  );

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:09:18