Android Sqlite:删除表中的前n条记录(改为删除所有行)

时间:2015-08-02 23:55:45

标签: android sqlite android-sqlite

我使用以下sql语句删除表中的前5行:

DELETE FROM tblname WHERE `id`   IN (SELECT `id`   FROM tblname ORDER BY `id`   ASC LIMIT 5)

不删除5行,而是删除所有行。

我也尝试了以下变体:

DELETE FROM tblname WHERE 'rowid' IN (SELECT 'rowid' FROM tblname ORDER BY 'rowid' ASC LIMIT ?)

我找不到由此产生的任何错误。以下是我用于执行此操作的特定代码:

final SQLiteDatabase db = getWritableDatabase();
final String selectQuery = "DELETE FROM " + TABLE_NAME + " WHERE '_id' IN (SELECT '_id' FROM "+ TABLE_NAME + " ORDER BY '_id' ASC LIMIT 5)";

final Cursor cursor = db.rawQuery(selectQuery, null);

cursor.moveToFirst();
cursor.close();

任何指针都会非常感激。

2 个答案:

答案 0 :(得分:2)

嗯,'_id'是主查询和子查询的常量字符串文字(而不是列名) - 所以所有记录都匹配,所有记录都被删除。

Here是sqlite相关文档。使用_id作为列名(标识符)不需要任何类型的周围引号,但是如果要添加一些引号,请使用双引号"

答案 1 :(得分:2)

你确定'_id'应该是单引号吗?通常,您不会在列名称周围添加引号。我创建了一个名为id的整数主键字段的表,此查询按预期工作:

DELETE FROM tblname WHERE id IN (SELECT id FROM tblname ORDER BY id ASC LIMIT 1)

但是这个查询删除了所有内容:

DELETE FROM tblname WHERE 'id' IN (SELECT 'id' FROM tblname ORDER BY 'id' ASC LIMIT 1)