众所周知,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;)。
答案 0 :(得分:3)
这没问题,因为这是一种完全不同的查询类型。 in
最多需要检查一千个硬编码值。
您也可以将其写为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)
但为什么不加入?