【问题标题】:Maximum number of expressions in a list is 1000列表中的最大表达式数为 1000
【发布时间】:2015-05-29 18:02:33
【问题描述】:

我正在尝试从 oracle 数据库中选择 170k 条记录,有一些方法可以避免这个错误吗?或任何改进此查询的方法?

谢谢。

选择 sr.RELATED_PON、srsi.VALID_VALUE 从 SERV_REQ sr 内部连接 ​​SERV_REQ_SI_VALUE srsi 在 sr.DOCUMENT_NUMBER = srsi.DOCUMENT_NUMBER 内部连接 ​​SERV_ITEM si 在 si.SERV_ITEM_ID = srsi.SERV_ITEM_ID 和 si.STATUS = '6' 其中 srsi.VALUE_LABEL = 'unitAddress' 和 srsi.VALID_VALUE 在 ('1682511819', '1682575135', '1682580326' ... 超过 150k 这里! )

【问题讨论】:

  • 这太疯狂了。您不能将这 150k 值放在一个表上并使用连接或 in (SELECT .... 吗?
  • 你可以写成and ( srsi.VALID_VALUE in ('1682511819', '1682575135', '1682580326' ... less than 150k here! ) OR srsi.VALID_VALUE in ( '222222222','333333333'.... next 100K here) OR srsi.VALID_VALUE in ('4444444444','5555555555' ... ) etc etc ) 但我同意@Lamak - 你做错了
  • 我明白了,非常感谢。 :)

标签: sql oracle-sqldeveloper


【解决方案1】:

Lamak 是正确的:这看起来确实像一个属于表格的列表。

但是,如果由于某种原因不方便,则必须将 IN 子句分成不超过 1000 个元素的块。令人高兴的是,这很简单:每 1000 个项目插入一次 ) OR ( scri.VALID_VALUE in

不幸的是,您很快就会遇到查询字符串的最大大小。 (对于 Oracle,我认为是 32K)...但请认真考虑临时表之类的东西。

【讨论】:

  • 非常感谢 Kenneth Sizer,有了这个改进,我可以做到。 :)
猜你喜欢
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
  • 2018-11-15
  • 1970-01-01
  • 2020-09-28
相关资源
最近更新 更多