我有一个包含id集合的表(sqlite Android),以及我想保留的一组id。
然后如果toRetain = [1,2,3,4]我创建一个执行:
DELETE FROM my_items WHERE _id NOT IN (1,2,3,4);
但是如果要保留的项目的长度非常高,则SQL引擎会抛出异常:“太多的SQL变量”。由于该条款不是IN,我不能以较小的步骤完成。
我该如何解决?
我认为一种解决方案是在时态表中插入所有ID然后执行:
DELETE FROM my_items WHERE _id NOT IN (SELECT_id FROM items_to_delete);
这个解决方案是否正确有效?
答案 0 :(得分:4)
我认为创建一个临时表或表变量,然后插入要保留的所有ID。然后通过将主表与此临时变量或表变量连接从主表中删除。
这里我建议创建一个索引,如果你使用临时表也使用NOT IN的内连接
答案 1 :(得分:1)
Android在您对查询中的值进行硬编码时不喜欢它,请尝试
db.delete("my_items", "_id NOT IN (?, ?, ?, ?)", String[] {"1", "2", "3", "4"});
或者,如果您使用ContentProvider,则:
getContentResolver().delete("content://uri/to/my/items", "_id NOT IN (?, ?, ?, ?)", String[] {"1", "2", "3", "4"})