Oracle使用HAVING子句筛选的表条目删除时报ORA-00933如何解决
ORA-00933 报错解决方案
你使用的是MySQL风格的DELETE JOIN语法,Oracle数据库不支持该写法,因此触发ORA-00933: SQL command not properly ended错误,可使用以下两种可行方案实现需求:
方案1:IN 子查询实现(适合小数据量场景,写法简单易读)
DELETE FROM MyTable WHERE USER_ID IN ( SELECT USER_ID FROM MyTable GROUP BY USER_ID HAVING MAX(login_time) < SYSDATE - 90 );
方案2:EXISTS 子查询实现(适合大数据量场景,执行性能更优)
DELETE FROM MyTable a WHERE EXISTS ( SELECT 1 FROM MyTable b WHERE b.USER_ID = a.USER_ID GROUP BY b.USER_ID HAVING MAX(b.login_time) < SYSDATE - 90 );
注意事项
- 执行删除操作前,请先执行对应SELECT查询确认匹配的条目符合预期,避免误删数据
- 生产环境操作前建议提前备份相关表数据
内容的提问来源于stack exchange,提问作者user3478415
相关产品推荐
相关产品推荐

