如何在SQLPlus中使用关联删除匹配记录并解决ORA-00933报错
报错原因
你使用的是MySQL风格的关联DELETE语法,Oracle数据库不支持该写法,因此触发ORA-00933语法错误。
正确实现方案
推荐以下两种经过验证的稳定写法:
- 方案1:IN子查询实现(适合小数据量场景)
执行前建议先执行查询验证待删除数据是否符合预期:
确认无误后执行删除语句:SELECT * FROM example1_tbs t WHERE t.department_name IN (SELECT department_name FROM example2_tbs);DELETE FROM example1_tbs t WHERE t.department_name IN (SELECT department_name FROM example2_tbs); - 方案2:EXISTS子查询实现(适合大数据量场景,执行效率更高)
验证查询语句:
删除语句:SELECT * FROM example1_tbs t WHERE EXISTS ( SELECT 1 FROM example2_tbs s WHERE s.department_name = t.department_name );DELETE FROM example1_tbs t WHERE EXISTS ( SELECT 1 FROM example2_tbs s WHERE s.department_name = t.department_name );
注意事项
Oracle也支持通过可更新关联视图的方式实现关联删除,但要求关联的两个表中驱动表存在主键约束,写法兼容性不如上述两种方案,因此不做优先推荐。
内容的提问来源于stack exchange,提问作者kishore kumar
相关产品推荐
相关产品推荐

