admin

Oracle SQL:如何在IN子句中使用1000多个项目

sql

我有一条SQL语句,我想在其中ep_codes使用IN子句来获取1200的数据。当我ep_codes在IN子句中包含1000个以上时,Oracle表示不允许这样做。为了克服这个问题,我尝试如下更改SQL代码:

SELECT period, ...
FROM   my_view
WHERE  period = '200912'
       ...
       AND ep_codes IN (...1000 ep_codes...)
       OR  ep_codes IN (...200 ep_codes...)

该代码已成功执行,但结果很奇怪(在所有期间都获取了计算结果,而不仅仅是200912,这不是我想要的)。是否应该使用ORbetweenIN子句来做到这一点,还是应该执行两个单独的代码,一个使用1000,另一个使用200
ep_codes?


Pascal Martin的解决方案运行完美。感谢所有提供宝贵建议的人。


阅读 124

收藏
2021-05-10

共1个答案

admin

IN()实际上,不确定在a中使用这么多的值是否那么好-尤其是对于性能而言。

当您说“ 结果很奇怪 ”时,可能是因为括号有问题吗?如果您尝试此操作,而不是您建议的操作,该怎么办:

SELECT ...
FROM ...
WHERE ...
      AND (
          ep_codes IN (...1000 ep_codes...)
          OR  ep_codes IN (...200 ep_codes...)
      )

这会使结果不那么 奇怪 吗?

2021-05-10