小编典典

在SQLite WHERE子句中组合大量条件

sql

我需要检索与列表中存储的ID匹配的记录。在运行时生成的查询很简单:

SELECT [whatever FROM sometable] WHERE (id = 1) or (id = 5) or (id = 33).

相当于

SELECT [whatever FROM sometable] WHERE [id] IN (1, 5, 33);

很好,但是如果列表包含成百上千个ID,该怎么办?该语句将非常庞大,并且在某些时候SQL解析器可能崩溃了,或者如果不是,则性能可能会很差。
我该如何以对所检索的记录数量不太敏感的方式来执行此操作?

(我不能只遍历列表并逐个检索记录的原因是,我需要数据库对我执行ORDER
BY。记录必须来自按特定字段排序的数据库,而列表代表由选择的记录用户可以在网格中进行多种排序,是的,我可以在检索到记录后对代码进行排序,但这是计划B,因为我什至不需要将所有记录都保存在一个数据结构中,只是为了正确订购。)


阅读 276

收藏
2021-04-28

共1个答案

小编典典

如果您确实有太多的ID,以至于担心SQL解析器崩溃,则可以将它们存储到临时表中并进行交叉联接。

只需使用一个(主键)列ID创建表,然后使用所需的ID填充该表并使用类似以下内容:

SELECT [whatever] FROM [sometable] st, [idtable] it
WHERE st.id = it.id

该查询不会阻塞任何解析器,并且检索到的行将限于临时表中具有ID的行。

这不 是一个临时表,当然,你可以让它躺在身边只要你保证只有一个“东西”使用它一次。

2021-04-28