FROM子句中的子查询是执行ONCE还是REPEATEDLY 对于表A中的每个记录(检查)?
select tA.*
from tableA tA,
(select myGetSingleIdFunction('asdfaf') id from dual) tB
where tA.id = tB.id;
答案 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,它会以您担心的方式更多地迭代收藏。