Oracle IN子句限制

时间:2014-03-25 09:56:17

标签: oracle

众所周知,Oracle中的IN子句限制为1000个元素。

我不确定的一点是,如果他们是查询的结果,我可以超过1000。

例如,如果我们假设:

SELECT TYPEID FROM SECONDTABLE WHERE DATE < YESTERDAY

假设查询返回4300个值,我们可以写:

SELECT
  ID
FROM
  FIRSTTABLE
WHERE
  TYPEID IN (SELECT TYPEID FROM SECONDTABLE WHERE DATE < YESTERDAY)

?由于IN包含一个开头的陈述(但是4300一次&#34;扩展&#34;)。

2 个答案:

答案 0 :(得分:3)

这没问题,因为这是一种完全不同的查询类型。 in最多需要检查一千个硬编码值。

然而,这与这一点无关。 Oracle不像你说的那样“扩展”子查询的结果。

您也可以将其写为join,实际上是相同的。这也不限于特定的行数。

如何使用join

SELECT f.ID
FROM   FIRSTTABLE f
JOIN   SECONDTABLE s
ON     f.TYPEID = s.TYPEID
WHERE  s.DATE < s.YESTERDAY

答案 1 :(得分:0)

  

IN子句中的文字不能超过1000个。您可以,   但是,在IN子句中有SELECT语句可以返回一个   无限数量的元素

所以你可以使用这个

SELECT
  ID
FROM
  FIRSTTABLE
WHERE
  TYPEID IN (SELECT TYPEID FROM SECONDTABLE WHERE DATE < YESTERDAY)

但为什么不加入