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

如何在SQLite中删除单条重复数据?附Android代码示例

在Android SQLite中删除单条重复数据行的解决方案

嘿,我来帮你搞定这个问题!在SQLite里要只删除一条重复的Jim 21数据行,核心问题是要能唯一区分每一行——你当前的表结构没有主键,所有重复的Jim 21行完全一样,SQLite根本不知道该删哪一条。下面是具体的实现思路和代码调整方案:

1. 先给表添加唯一标识(推荐方案)

最规范的做法是给users表加一个自增主键,这样每一行都有独一无二的ID,后续操作重复数据就很方便了。

如果你是刚创建表,直接修改建表语句:

CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name VARCHAR,
    age INT(3)
);

如果已经有数据了,你需要先备份现有数据,重建带主键的表,再把数据导回去——不过看你的代码是刚创建表,直接改建表语句就行。

2. 删除单条重复行的SQL语句

假设表已经有了id主键,并且存在多条Jim 21的记录,你可以用以下SQL删除其中一条(比如ID最小的那条):

DELETE FROM users 
WHERE name='Jim' AND age=21 
AND id = (SELECT MIN(id) FROM users WHERE name='Jim' AND age=21);

要是想删除ID最大的那条,把MIN(id)换成MAX(id)就行。

3. 适配你的Android代码

把你的代码调整后,完整示例如下:

SQLiteDatabase myDataBase = this.openOrCreateDatabase("Users", MODE_PRIVATE, null);
// 创建带自增主键的用户表
myDataBase.execSQL("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age INT(3))");
// 插入测试数据
myDataBase.execSQL("INSERT INTO users(name,age) VALUES ('Rob', 34)");
myDataBase.execSQL("INSERT INTO users(name,age) VALUES ('Nat', 22)");
// 插入两条重复的Jim 21数据
myDataBase.execSQL("INSERT INTO users(name,age) VALUES ('Jim', 21)");
myDataBase.execSQL("INSERT INTO users(name,age) VALUES ('Jim', 21)");
// 删除其中一条重复的Jim 21
myDataBase.execSQL("DELETE FROM users WHERE name='Jim' AND age=21 AND id = (SELECT MIN(id) FROM users WHERE name='Jim' AND age=21)");

4. 不加主键的临时解决方案(不推荐)

如果实在不想加主键,SQLite会给每个没有显式主键的表自动生成一个隐藏的ROWID列,你可以利用它来删除单条重复行:

DELETE FROM users 
WHERE name='Jim' AND age=21 
AND ROWID = (SELECT MIN(ROWID) FROM users WHERE name='Jim' AND age=21);

不过这种方式不够直观,也不利于后续的数据库维护,还是推荐显式添加主键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:09:06