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进行排序。否则,评估顺序应该不重要。 –
见[编辑]注释 –