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 查询。您应该按如下方式使用它:

  1. 首先在 table

    中添加 id 列作为主键
    myDatabase.execSQL("CREATE TABLE IF NOT EXISTS users (ID INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR , age INT(3))");
    
  2. 修改删除查询如下

    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)