我需要根据一个大列表来选择:
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/