太多的 SQL 变量和 NOT IN 子句

Add*_*dev 3 java sql sqlite android

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

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

DELETE FROM my_items WHERE _id NOT IN (1,2,3,4);
Run Code Online (Sandbox Code Playgroud)

但是如果要保留的项目的长度非常长,SQL 引擎会抛出异常:“SQL 变量太多”。由于子句不在,我不能以更小的步骤来完成。

我该如何解决?

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

DELETE FROM my_items WHERE _id NOT IN (SELECT_id FROM items_to_delete);
Run Code Online (Sandbox Code Playgroud)

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

Ana*_*dke 5

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

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