在FROM子句中是否重复执行子查询

时间:2013-03-05 19:51:45

标签: sql oracle

FROM子句中的子查询是执行ONCE还是REPEATEDLY 对于表A中的每个记录(检查)?

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

3 个答案:

答案 0 :(得分:1)

阅读这篇文章:On Caching and Evangelizing SQL By Tom Kyte

这就是答案:

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

答案 1 :(得分:0)

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

基本上将查询转换为:

select tA.* 
from tableA tA
cross join dual
where tA.id = myGetSingleIdFunction('asdfaf')

答案 2 :(得分:0)

在。如果您感兴趣,可以查看database cursors,它会以您担心的方式更多地迭代收藏。