TableX的Oracle SQL IN語句:是否按順序執行?
number doc
number item
number parentItem
隨着數據:
1, 1000, 0
1, 1010, 1000
1, 1020, 1000
1, 2000, 0
1, 2010, 2000
TableY
number doc
number item
varchar2(16) SomeData
隨着數據:
1, 1000, "1000 Data"
1, 2000, "2000 Data"
我用下面的SQL查詢來從TableY
select x.doc, x.item, y.SomeData from TableX x
join TableY y
on y.doc = x.doc and y.item IN (x.item, x.ParentItem)
獲得 「SomeData」 應該結果是在:
1, 1000, "1000 Data"
1, 1010, "1000 Data"
1, 1020, "1000 Data"
1, 2000, "2000 Data"
1, 2010, "2000 Data"
我的問題是:是對IN-聲明評估順序,或者這取決於Oracle採取的路徑?
編輯 我的意思是,當有在TableY一個項目從TableX的(如1000),一個條目將這個值可以首先在使用JOIN或將ParentItem首先使用? 或者只有在項目上的JOIN失敗時纔會對ParentItem執行JOIN操作?
我不確定在這種情況下,「順序評估」到底是什麼意思。你問IN語句是否保證在連接條件之後被應用?您是否在IN子句中詢問兩個值是否存在短路評估?或者你在問別的嗎? –
如果您關心的是結果集的排序,您可以保證使用ORDER BY進行排序。否則,評估順序應該不重要。 –
見[編輯]註釋 –