4

我有一个包含 id 集合(sqlite Android)的表,以及我想要保留的 id 集合。

然后如果 toRetain = [1,2,3,4] 我创建一个执行:

DELETE FROM my_items WHERE _id NOT IN (1,2,3,4);

但是如果要保留的项目的长度非常长,SQL 引擎会抛出异常:“too many SQL variables”。由于该子句不在,我不能以较小的步骤进行。

我该如何解决?

我认为一种解决方案是将所有 id 插入临时表中,然后执行:

DELETE FROM my_items WHERE _id NOT IN (SELECT_id FROM items_to_delete);

该解决方案是否正确有效?

4

2 回答 2

5

我认为创建一个临时表或表变量,然后插入所有要保留的 ID。然后通过将此临时或表变量加入主表来从主表中删除。

在这里我建议创建一个索引,如果你使用临时表也使用 NOT IN 的内连接

于 2012-09-06T09:04:34.797 回答
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"})
于 2012-09-06T09:11:45.213 回答