如何删除表中event='repo'且位于event='harv'记录之后的所有行
首先要明确:关系型数据库的表本身是无序集合,要判定记录的“前后位置”必须依赖一个可排序的字段(常见如自增主键id、记录插入时间create_time等),下文默认你的表存在自增主键id作为顺序判定依据,且event = 'harv'仅有1条记录,代码中的你的表名请替换为你实际使用的表名。
最简单实现方案
- 先查询确认待删除记录,确认无误后再执行删除,避免误操作:
SELECT * FROM 你的表名 WHERE event = 'repo' AND id > (SELECT id FROM 你的表名 WHERE event = 'harv' LIMIT 1)
- 确认待删记录符合预期后,执行删除语句:
- MySQL数据库写法:
DELETE FROM 你的表名 WHERE event = 'repo' AND id > (SELECT t.id FROM (SELECT id FROM 你的表名 WHERE event = 'harv' LIMIT 1) t)
- PostgreSQL、SQLite等数据库写法:
DELETE FROM 你的表名 WHERE event = 'repo' AND id > (SELECT id FROM 你的表名 WHERE event = 'harv' LIMIT 1)
如果你的表中存在多条event = 'harv'的记录,需要删除最后一条harv之后的repo,把上述子查询里的SELECT id修改为SELECT MAX(id)即可。
内容的提问来源于stack exchange,提问作者sdom
相关产品推荐
相关产品推荐

