我使用以下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();
任何指针都会非常感激。
答案 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)