我查看了一些PL / SQL代码并找到了一条查询,其中我实际上并没有得到它的工作原理。希望从这里获得一些技术建议。
这条查询如下所示:
SELECT a.ROWID
FROM TableA a
WHERE a.object_name IN ('HEADERS','LINES','DELIVERIES')
AND a.change_type IN ('A','C')
AND a.ROWID NOT IN (SELECT MAX (b.ROWID)
FROM TableA b
WHERE b.object_name = a.object_name
AND b.change_type = a.change_type
AND b.pk1 = a.pk1
AND b.object_identifier = a.object_identifier
);
据我所知,内部查询应首先运行(如果我错了,请纠正我),然后内部查询结果将用于外部查询。
对于上面的查询,内部查询如何运行,因为它需要来自外部查询的数据(来自别名TableA a的数据)。
希望对此有一些指导,因为我在PL / SQL开发方面非常新鲜。
谢谢!
答案 0 :(得分:0)
它不是PL / SQL,只是经典的SQL语句。
目的是接缝
retrieve all the lines which are not the "last version" (biggest rowid for a couple pk1 and object_identifier)
“not in”部分将检索一对(pk1和object_identifier)的最大rowid,然后,外部查询将检索所有不是max rowid的行
在执行过程中,您可以查看解释计划以了解oracle将要执行的操作。
答案 1 :(得分:0)
内部查询不会先运行。从概念上讲,你可以认为它像这样运行:
a.*
列的特定值运行内部查询