對於表A中的每個記錄(檢查),FROM子句中的子查詢是否執行ONCE或REPEATEDLY ?在FROM子句中重複執行子查詢
select tA.*
from tableA tA,
(select myGetSingleIdFunction('asdfaf') id from dual) tB
where tA.id = tB.id;
對於表A中的每個記錄(檢查),FROM子句中的子查詢是否執行ONCE或REPEATEDLY ?在FROM子句中重複執行子查詢
select tA.*
from tableA tA,
(select myGetSingleIdFunction('asdfaf') id from dual) tB
where tA.id = tB.id;
閱讀這篇文章:On Caching and Evangelizing SQL By Tom Kyte
這就是答案:
select tA.*
from tableA tA
where tA.id = (select myGetSingleIdFunction('asdfaf') from dual);
這沒有意義。如果'dual'表包含多個記錄,則會出現子查詢返回多個值的錯誤。 – Guffa 2013-03-07 21:29:33
如果查詢規劃器是足夠好的話,它會認識到您在子查詢中使用了一個常量值,並且僅使用表dual
來確定應該重複tableA
的結果的次數。
基本上轉動查詢分成:
select tA.*
from tableA tA
cross join dual
where tA.id = myGetSingleIdFunction('asdfaf')
一旦。如果你有興趣,你可以查看database cursors,它以你所擔心的方式遍歷一個集合。
哪個DBMS是這個呢? – 2013-03-05 20:01:22
這是針對Oracle數據庫的。 – psabela 2013-03-05 20:33:43