我有一个类似这样的查询:
select w.rowid, w.waclogin
from tableA w, tableB wa, tableC a
where wa.alucod = a.alucod
and w.waclogin = wa.waclogin
and a.cpf = '31808013875'
and rownum <= 1;
结果是:
ROWID WACLOGIN
AAA0CEAHSAABE07ABA 31808013875
但是当我使用fetch (为了提高性能)时,返回的rowid是不同的:
select w.rowid, w.waclogin
from tableA w, tableB wa, tableC a
where wa.alucod = a.alucod
and w.waclogin = wa.waclogin
and a.cpf = '31808013875'
fetch first row only;
结果如下:
ROWID WACLOGIN
AAA0DMAHaAAA+ZcAAX 31808013875
为什么fetch会改变rowid?对我来说,这是没有意义的。
更新
使用fetch时,返回的行id来自表B,而不是表A。
发布于 2019-05-30 07:52:35
tableA
中有两行具有相同的wacLogin
值(但明显不同的rowID
值)。这两个查询都没有指定order by
,因此返回哪一行是任意的。据推测,这两个查询使用的查询计划略有不同,因此每个查询返回不同的任意行。当然,明天,如果查询计划或表的物理组织发生变化,任何一个或两个查询都可能开始返回不同的任意行。如果希望在两种情况下都返回相同的行,则需要使用order by
子句对结果进行唯一排序,从而使两个查询都具有确定性。
https://stackoverflow.com/questions/56369867
复制相似问题