ANDROID STUDIO/SQLiteLog:(1) "LIMIT" 附近:语法错误
ANDROID STUDIO / SQLiteLog: (1) near "LIMIT": syntax error
我正在尝试使用带有 LIMIT 1 的 SQL 的 DELETE 函数删除我在数据库中获取的重复项,但它向我显示 "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");
谁能告诉我为什么会出现此错误以及如何更正它?
在您的 delete 语句中,您使用了 limit with Delete 查询。您应该按如下方式使用它:
首先在 table
中添加 id 列作为主键
myDatabase.execSQL("CREATE TABLE IF NOT EXISTS users (ID INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR , age INT(3))");
修改删除查询如下
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)");
SQLite 在 DELETE
语句中不支持 LIMIT
。
使用 returns 包含您搜索的名称的行的 rowid
的子查询:
String sql = "DELETE FROM users WHERE rowid = (SELECT rowid FROM users WHERE name = 'Vaishant' LIMIT 1)";
myDatabase.execSQL(sql);
如果你想删除重名只保留1个,那么你可以这样做:
DELETE FROM users
WHERE NOT EXISTS (SELECT 1 FROM users u WHERE u.name = users.name AND u.rowid < users.rowid)
或:
DELETE FROM users
WHERE rowid NOT IN (SELECT MIN(rowid) FROM users GROUP BY name)
我正在尝试使用带有 LIMIT 1 的 SQL 的 DELETE 函数删除我在数据库中获取的重复项,但它向我显示 "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");
谁能告诉我为什么会出现此错误以及如何更正它?
在您的 delete 语句中,您使用了 limit with Delete 查询。您应该按如下方式使用它:
首先在 table
中添加 id 列作为主键myDatabase.execSQL("CREATE TABLE IF NOT EXISTS users (ID INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR , age INT(3))");
修改删除查询如下
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)");
SQLite 在 DELETE
语句中不支持 LIMIT
。
使用 returns 包含您搜索的名称的行的 rowid
的子查询:
String sql = "DELETE FROM users WHERE rowid = (SELECT rowid FROM users WHERE name = 'Vaishant' LIMIT 1)";
myDatabase.execSQL(sql);
如果你想删除重名只保留1个,那么你可以这样做:
DELETE FROM users
WHERE NOT EXISTS (SELECT 1 FROM users u WHERE u.name = users.name AND u.rowid < users.rowid)
或:
DELETE FROM users
WHERE rowid NOT IN (SELECT MIN(rowid) FROM users GROUP BY name)