如何在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
相关产品推荐
相关产品推荐

