DB2 中谓词 WHERE IN 的上限是多少。
例如:
从empid in (1,2,3,4...N) 的员工中选择薪水
AS/400 限制大约是 1000,基于我们在超过该限制时得到的错误。我们将拆分为多个较小的查询来修补我们的旧版 JEE 应用程序。
有时,如果你不得不问这个问题,你可能会走错路:-)
如果您担心限制,请考虑将值放入临时表中,然后将这些表连接起来以获取结果。
至于具体的限制,这几乎肯定会根据您使用的 DB2 有所不同:LUW、z/OS、iSeries 等等。它也可能因版本而异。我在网上看到有关 DB2 拒绝超过一千个条目的问题,但至于哪个平台/版本,我不能说。
您最好的选择可能是简单地测试您使用的任何版本,以查看何时达到限制。IBM 通常不倾向于发布这样的限制,而是假设您会做明智的事情并避免太多(尤其是因为优化引擎几乎不可能为任意值选择合适的执行路径)。
对于 z/OS,IBM 给出了以下限制,但没有关于 IN 子句的规范:
当达到 in 子句的限制时使用 join 语句。这对所有意图和目的都没有限制。
select salary from employee join mytable on empid = id.