简体   繁体   English

ANDROID STUDIO / SQLiteLog:(1)在“LIMIT”附近:语法错误

[英]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:您应该按如下方式使用它:

  1. 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))");
  2. 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.

相关问题 SQLiteLog:(1)在“ *”附近:语法错误 - SQLiteLog﹕ (1) near “*”: syntax error 数据库不存储数据。 我从Android Studio日志中得到“SQLiteLog:(1)near”Name“:语法错误” - Database does not store data. I get the “SQLiteLog: (1) near ”Name“: syntax error” from Android Studio log E/SQLiteLog: (1) near &quot;-&quot;: android app 中插入数据时出现语法错误 - E/SQLiteLog: (1) near "-": syntax error when insert data in android app “ INSERT”附近的SQLiteLog错误(1):语法错误 - SQLiteLog Error (1) near “INSERT”: syntax error “”附近:使用 android studio 的 SQL 中的语法错误 - near "": syntax error in SQL with android studio Android Studio 创建数据库错误(android.database.sqlite.SQLiteException: near &quot;and&quot;: syntax error (code 1): )详解 - Android Studio Create Database error (android.database.sqlite.SQLiteException: near "and": syntax error (code 1): ) Detailed Analysis Android - SQLiteException:near“=”:语法错误(代码1) - Android - SQLiteException: near “=”: syntax error (code 1) SQLiteException:靠近“”语法错误 - SQLiteException: near “” syntax error Postgres:“ as”处或附近的语法错误 - Postgres : syntax error at or near “as” 机器人 - 近“ALTER” SQLite的例外:语法错误(码1) - Android - SQLite Exception near “alter” : syntax error (code 1)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM