You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite如何仅删除fosters_user表中user_id为admin的第一条匹配记录

错误原因分析
  • 第一段SQL错误:子查询SELECT "admin" FROM fosters_user返回的是固定字符串admin,等同于直接写WHERE user_id = 'admin',会匹配表中所有user_id为admin的记录,因此两条记录全部被删除。
  • 第二段SQL错误:子查询SELECT user_id FROM fosters_user WHERE user_id = "admin" LIMIT 1仅限制了子查询返回1行值为admin的结果,外层WHERE user_id IN (...)依然会匹配所有user_id为admin的记录,LIMIT不会作用到外层的删除逻辑,所以还是会删除全部admin记录。
正确实现方案

SQLite原生支持在DELETE语句中使用LIMIT子句,两种常用实现方式如下:

方案1:DELETE直接加LIMIT

最简单的写法,直接限制删除的匹配行数为1即可:

DELETE FROM fosters_user 
WHERE user_id = 'admin'
LIMIT 1;

如果需要指定删除的目标行(比如按主键顺序删最早/最晚插入的记录),可以补充ORDER BY子句,示例(假设表存在自增主键id,删除最早插入的admin记录):

DELETE FROM fosters_user 
WHERE user_id = 'admin'
ORDER BY id ASC
LIMIT 1;

方案2:通过唯一rowid匹配删除

如果需要严格保证仅删除单条,可以利用SQLite表默认自带的唯一隐藏字段rowid做匹配:

DELETE FROM fosters_user 
WHERE rowid = (
  SELECT rowid FROM fosters_user 
  WHERE user_id = 'admin' 
  LIMIT 1
);

子查询中也可以加ORDER BY子句指定要删除的目标行。

内容的提问来源于stack exchange,提问作者Itzik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:54:04