0

FROM 子句中的子查询是对表 A 中的每条记录(检查)执行一次还是重复执行?

select tA.* 
from   tableA tA,
       (select myGetSingleIdFunction('asdfaf') id from dual) tB
where tA.id = tB.id;
4

3 回答 3

1

阅读这篇文章: 关于缓存和传播 SQL,作者:Tom Kyte

这是答案:

select tA.* 
from   tableA tA
   where tA.id = (select myGetSingleIdFunction('asdfaf') from dual);
于 2013-03-07T21:14:25.370 回答
0

一次。如果您有兴趣,可以查找database cursors,它以您担心的方式更多地遍历集合。

于 2013-03-05T20:01:02.743 回答
0

如果查询计划器足够好,也不是。它会识别出您在子查询中使用了一个常量值,并且只使用该表来确定结果应该重复dual多少次。tableA

基本上把查询变成:

select tA.* 
from tableA tA
cross join dual
where tA.id = myGetSingleIdFunction('asdfaf')
于 2013-03-05T19:59:24.563 回答