带子查询的DELETE语句执行逻辑疑问:等值最大值的行未被删除
问题原因解答
你贴出的DELETE语句存在语法疏漏,子查询缺少左括号,实际可正常执行的正确写法应为:
DELETE FROM neworders WHERE ordertotal < (SELECT MAX(ordertotal) FROM orders);
出现该现象的核心原因如下:
- DELETE语句的执行逻辑是仅删除满足WHERE子句条件的行,不满足条件的行默认会被保留
- 你设置的筛选条件为
ordertotal < orders表的ordertotal最大值,经查询orders表的ordertotal最大值为1910.64,因此只有ordertotal严格小于1910.64的行才会触发删除 - neworders中ordertotal等于1910.64的行不满足
小于最大值的筛选条件,因此不会被删除,最终留存下来
如果需要调整删除逻辑,可根据需求修改WHERE条件:
- 要删除所有小于等于最大值的行,将条件改为
ordertotal <= (SELECT MAX(ordertotal) FROM orders) - 要删除大于等于最大值的行,将条件改为
ordertotal >= (SELECT MAX(ordertotal) FROM orders)
内容的提问来源于stack exchange,提问作者Aida Arisa
相关产品推荐
相关产品推荐

