如何编写条件触发的SQL删除查询?附示例数据及预期结果
条件删除SQL语句实现方案
刚好能搞定你的需求,直接用带EXISTS子查询的DELETE语句就行,逻辑和你描述的伪代码完全匹配:
DELETE FROM table1 WHERE indexi = 85 AND user = 290045 AND EXISTS ( SELECT 1 FROM table1 WHERE indexi = 500 AND user = 290045 );
逻辑说明
- 子查询部分会先检查表中是否存在
user=290045且indexi=500的行 - 如果子查询返回结果(也就是存在符合条件的行),就会执行外层的DELETE操作,删掉
user=290045且indexi=85的记录 EXISTS的优势是效率高,只要找到第一条匹配的记录就会停止查询,不用遍历全表统计数量
测试验证
原表数据:
| user | line_no | header | indexi |
|---|---|---|---|
| 290045 | 0 | 0 | 500 |
| 290045 | 1 | 0 | 85 |
| 733 | 0 | 0 | 33 |
执行上述SQL后,预期结果:
| user | line_no | header | indexi |
|---|---|---|---|
| 290045 | 0 | 0 | 500 |
| 733 | 0 | 0 | 33 |
完全符合你想要的效果~
内容的提问来源于stack exchange,提问作者187Ante
相关产品推荐
相关产品推荐

