请让我知道如何删除android sqlite数据库中的n行.我用过这段代码:
String ALTER_TBL ="delete from " + MYDATABASE_TABLE +
"where"+KEY_ID+"in (select top 3"+ KEY_ID +"from"+ MYDATABASE_TABLE+"order by _id );";
sqLiteDatabase.execSQL(ALTER_TBL);
Run Code Online (Sandbox Code Playgroud)
但它显示错误.
03-21 13:19:39.217: INFO/Database(1616): sqlite returned: error code = 1, msg = near "in": syntax error
03-21 13:19:39.226: ERROR/Database(1616): Failure 1 (near "in": syntax error) on 0x23fed8 when preparing 'delete from detail1where_id in (select top 3_idfromdetail1order by _id );'.
Run Code Online (Sandbox Code Playgroud)
zap*_*apl 42
String ALTER_TBL ="delete from " + MYDATABASE_TABLE +
" where "+KEY_ID+" in (select "+ KEY_ID +" from "+ MYDATABASE_TABLE+" order by _id LIMIT 3);";
Run Code Online (Sandbox Code Playgroud)
"delete from" + TABLE + "where" = "delete frommytablewhere" 此方法使用两个步骤删除前N行.
找到前N行:
SELECT id_column FROM table_name ORDER BY id_column LIMIT 3
结果是一个id列表,表示前N行(此处为3行).该ORDER BY部分很重要,因为SQLite不保证没有该子句的任何订单.如果没有ORDER BY该语句可以删除3个随机行.
从表中删除与id列表匹配的任何行:
DELETE FROM table_name WHERE id_column IN ( {Result of step 1} )
如果步骤1的结果为空,则不会发生任何事情,如果少于N行,则只删除这些行.
重要的是要注意,id_column必须是唯一的,否则将删除超过预期的行.如果用于排序的列不唯一,则可以将整个语句更改为DELETE FROM table_name WHERE unique_column IN (SELECT unique_column FROM table_name ORDER BY sort_column LIMIT 3).提示:SQLite ROWID是unique_column删除表时的一个很好的候选者(在删除视图时可能不起作用 - 这里不确定).
要删除最后 N行,必须将排序顺序反转为descending(DESC):
DELETE FROM table_name WHERE unique_column IN (
SELECT unique_column FROM table_name ORDER BY sort_column DESC LIMIT 3
)
Run Code Online (Sandbox Code Playgroud)
要删除的N个第到M 个行中的LIMIT条款可以通过进行扩展OFFSET.下面的示例将跳过前两行并返回/删除下一行3.
SELECT unique_column FROM table_name ORDER BY sort_column LIMIT 3 OFFSET 2
Run Code Online (Sandbox Code Playgroud)
设置LIMIT为负值(例如LIMIT -1 OFFSET 2)将返回除前2行之外的所有行,导致删除除前2行之外的所有行 - 这也可以通过转换SELECT .. WHERE .. IN ()为SELECT .. WHERE .. NOT IN ()
SQLite可以选择ORDER BY x LIMIT n在DELETE没有子查询的情况下直接在语句中启用该部件.该选项未在Android上启用且无法激活,但在其他系统上使用SQLite的用户可能会对此感兴趣:
DELETE FROM table_name ORDER BY sort_column LIMIT 3
Run Code Online (Sandbox Code Playgroud)