当前位置: 首页 > 面试题库 >

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

归和惬
2023-03-14
问题内容

我需要检索与列表中存储的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,因为我什至不需要将所有记录都保存在一个数据结构中,只是为了正确订购。)


问题答案:

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

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

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

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

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



 类似资料:
  • 问题内容: 我有以下查询: 这返回 我将如何使它工作?说参数是否为“有效”,则返回具有以下条件的记录? 问题答案: 您可以使用另一种方法:

  • 问题内容: 我今天输入了错误的查询,但它仍然有效,并给出了预期的结果。我的意思是运行此查询: 但是我不小心跑了这个查询 (请注意,而不是最后一个子句中的) 并且都从用户ID返回了正确的员工ID。 这两个查询有什么区别?第二种形式是否仅联接满足条件的2个表的成员,而第一种形式将联接整个表,然后运行查询?一个效率比另一个效率高吗?还有其他我想念的东西吗? 谢谢! 问题答案: 对于这样的内部联接,它们在

  • 问题内容: 假设我想要一个JasperReport,它可以让用户根据需要过滤日期。SQL如下: 现在,如果他们没有传递日期,我不想按某个日期进行过滤。我发现了人们使用的以下错误信息: 并使用以下默认值定义参数: 这无法正常工作,因为不会以我的SQL Server可以理解的格式输出日期。我想让条件条件仍然与jdbc驱动程序一起使用一条准备好的语句,并将参数扔进去,我只希望准备好的语句依赖于该参数是否

  • 我有两张桌子“table1”和“table2”。对于表1中的每一行,表2中可以有多行 和 然后我创建了这样的存储库 这将给出表1中按公司ID列出的行列表,以及表2中具有相应供应商ID的行列表。 到目前为止,我的实现工作正常。 答案是 目前,我以companyId作为输入,并给出了上述响应。现在我想把cityId作为一个输入。因此,表2的输出应该只包含给定cityId的详细信息。 那么,有谁能帮助我

  • 我有一个数组,它将被迭代,并取决于条件执行任务 我已经用if else完成了这个操作,并用switch,条件是如果(1&&2)(然后执行A)else if(1)(然后执行B)else if(2)(然后执行c)else if(none)(然后执行D) if else工作正常,但是需要对Switch语句进行哪些修正 对于ref=Javascript用数组或字符串切换大小写

  • 问题内容: 我有一个执行查询的SQL Server 2005存储过程。该存储过程采用三个参数。参数如下: @StateID为int, @ CountyID为int, @ CityID为int 这些参数用于查询客户列表。如果参数值不为null,我基本上想做一个“ AND”。但是,我目前无法执行if- else。如果参数值不为null,如何添加这些子句。换一种说法: 问题答案: 加上一些OR语句: 对