|
|
1
104
将这些值放在临时表中,然后执行select where id in(select id from TENTABLE) |
|
|
2
77
|
|
|
3
67
我几乎可以肯定,您可以使用或在多个INs之间拆分值:
|
|
|
4
52
|
|
|
5
8
您首先从哪里获得ID列表?因为它们是数据库中的ID,所以它们是否来自以前的某个查询? 我过去看到这一点是因为:-
我认为可能有更好的方法来重做这段代码,而仅仅是让这条SQL语句工作。如果你提供更多的细节,你可能会有一些想法。 |
|
|
6
5
使用表(…)中的…:
这是极少数需要提示的情况之一,否则Oracle将不使用列id上的索引。这种方法的优点之一是Oracle不需要一次又一次地硬解析查询。大多数情况下,使用临时表的速度较慢。 编辑1 简化了程序(感谢jimmyorr)+示例
这将输出:
|
|
7
4
我也在这里寻找解决办法。
在通常不超过1000项的情况下,这可能是一个很好的折衷方案,因为超过1000项将是您的“高端”边缘案例方案。例如,如果您有1500个项目,那么两个(1000500)的查询就不会那么糟糕了。这还假设每个查询本身并不特别昂贵。 这 不会 |
|
|
8
2
如果在IN子句中指定2000个ID,它将失败。
以下查询:
你所能做的,实际上是把这些记录分成1000条记录,然后一组一组地执行。 |
|
|
9
1
下面是一些Perl代码,它试图通过创建一个内联视图并从中进行选择来绕过限制。语句文本通过使用每行12个项目进行压缩,而不是单独从DUAL中选择每个项目,然后通过将所有列合并在一起进行解压缩。解压中的UNION或UNION ALL应该没有什么区别,因为它都在一个in中,在加入之前,它会对其施加唯一性,但在压缩中,UNION ALL用于防止大量不必要的比较。因为我过滤的数据都是整数,引用不是问题。
可以这样使用:
|
|
|
10
0
|
|
11
-2
而不是
使用以下命令:
干杯 |