【问题标题】:ORA-01795 maximum number of expressions in a list is 1000ORA-01795 列表中的最大表达式数为 1000
【发布时间】:2016-08-06 17:20:30
【问题描述】:

我收到了错误

ORA-01795 列表中的最大表达式数为 1000

对于下面的查询

select emp_id, emp_name, emp_code
from emp e
where emp_id in (001,002,005,006....18000);

我需要在IN 子句中放入 18000 条记录。我怎样才能做到这一点?如何修改给定的查询?

【问题讨论】:

  • 将 18000 条记录放在一个表中并加入。
  • 您完全在滥用IN 子句。如果你真的只想检查1到18000之间的所有值,那么你可以用where emp_id between 1 and 18000来表达。这对你来说还不够好吗?你想做什么?
  • all the previous questions 的回答对您没有帮助吗?如果不是,为什么?值来自哪里,您从哪里运行查询? (如果您有一个外部列表,例如在 Java 数组中,我可能会使用带有 member-of 的表集合,但这取决于..)

标签: sql oracle


【解决方案1】:

您可以(并且几乎肯定应该)将“记录”(值)放入表格中。然后您可以按照评论中建议的@jpw 进行加入;无论如何,查询引擎都会将 IN 条件视为连接。

或者,如果你想使用IN语法,你仍然需要一个表中的值,并将条件重写为

... where emp_id in ( select id from this_table )

其中“this_table”是这个新表的名称,“id”是列名。 1000 个表达式的限制适用于您在 IN 列表中硬编码的表达式,它不适用于子查询返回的结果数。

【讨论】:

    猜你喜欢
    • 2011-07-12
    • 1970-01-01
    • 2020-09-28
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 2013-07-24
    相关资源
    最近更新 更多