java - SQL 从很长的值列表中选择

标签 java sql spring-data-jpa firebird jaybird

我需要根据一个大列表来选择:

SELECT ... FROM tb WHERE tb.cl IN (?, ?, ?, ..................many)

我不能这样做,因为驱动程序实现 ( Jaybird ) 将查询限制为最多 1500 个参数,而且我无法选择/加载所有内容并在应用程序内部进行过滤,因为内存不足。

我该怎么办?

额外信息

我正在使用带有 Hibernate 和 JPA 存储库的 Spring Boot,因此如果可以在 JPQL 中完成或使用其他一些与环境相关的技术,它会更适合。

我实际上会使用 ...WHERE tb.cl NOT IN...,如果它有任何不同的话。
它有点像 EDI,我正在连接两个不同的数据库,所以使用嵌套选择不是一个选项。

最佳答案

一种替代方法是使用临时表,并根据需要向该表中插入尽可能多的数据。之后你可以使用:

Select .. from tb where tb.cl in (select cl from myTempTable)

然后对临时表进行截断或删除。据我所知,如果您使用参数,所有领先的关系数据库都会在 IN 子句中设置限制。 另一方面,使用临时表可以解决问题。

关于java - SQL 从很长的值列表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58314026/

相关文章:

mysql - 修改查询以使用新表代替静态数字范围

.net - 如何在只执行一次命令时检查 DBNull?

java - 关闭连接后,数据连接池中的连接也不可用

java - @Valid @RequestBody 无法验证输入错误的传入 Json

java - 是否可以限制 GlassFish(或底层 jvm 机器)中的端口号保留范围?

java - 如何在 Java 中跳过计算 0 * ... 之后算术表达式的剩余部分

java - 如何编辑转换为图像的文本?或任何其他实现/编辑文本的方法

php - Symfony2 Doctrine,通过外键连接表

java - 由 : org. hibernate.QueryException : could not resolve property: lastUpdateDate of: com. XXX.XXX.entity.Student 引起

spring - 如何在 Spring-Data-Rest 中实现细粒度的访问控制?