[英]ANDROID STUDIO / SQLiteLog: (1) near “LIMIT”: syntax error
I am trying to delete the duplicates that I am getting in my database using DELETE function of my SQL with LIMIT 1 but it is showing me the "LIMIT" syntax error.我正在尝试使用 LIMIT 1 的 SQL 的 DELETE function 删除我在数据库中获取的重复项,但它向我显示“LIMIT”语法错误。
myDatabase.execSQL("CREATE TABLE IF NOT EXISTS users (name VARCHAR , age INT(3))");
myDatabase.execSQL("INSERT INTO users (name, age) VALUES ('Vaishant', 21)");
myDatabase.execSQL("INSERT INTO users (name, age) VALUES ('Tommy',4)");
myDatabase.execSQL("DELETE FROM users WHERE name = 'Vaishant' LIMIT 1");
Can someone tell me why I am getting this error and how to correct it?有人能告诉我为什么我会收到这个错误以及如何纠正它吗?
SQLite does not support LIMIT
in a DELETE
statement. SQLite 不支持在DELETE
语句中使用LIMIT
。
Use a subquery that returns the rowid
of a row that contains the name that you search for:使用返回包含您搜索的名称的行的rowid
的子查询:
String sql = "DELETE FROM users WHERE rowid = (SELECT rowid FROM users WHERE name = 'Vaishant' LIMIT 1)";
myDatabase.execSQL(sql);
If you want to delete the duplicate names and keep only 1, then you can do this:如果要删除重复的名称并仅保留 1,则可以这样做:
DELETE FROM users
WHERE NOT EXISTS (SELECT 1 FROM users u WHERE u.name = users.name AND u.rowid < users.rowid)
or:或者:
DELETE FROM users
WHERE rowid NOT IN (SELECT MIN(rowid) FROM users GROUP BY name)
In your delete statement you are using limit with Delete query.在您的删除语句中,您将限制与删除查询一起使用。 You should use it as below:您应该按如下方式使用它:
First add id column as primary key in your table首先在表中添加 id 列作为主键
myDatabase.execSQL("CREATE TABLE IF NOT EXISTS users (ID INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age INT(3))");
change the query of delete as below更改删除查询如下
myDatabase.execSQL("DELETE FROM users WHERE id IN (SELECT id FROM (SELECT id, ROW_NUMBER() OVER (PARTITION BY name ORDER BY name) AS row_num FROM users )t WHERE row_num > 1)");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.