Luk*_*der 17 sql oracle pagination
从Oracle 12c开始,我们最终可以像这样使用SQL标准行限制子句:
SELECT * FROM t FETCH FIRST 10 ROWS ONLY
现在,在Oracle 12.1中,加入表时存在一个非常烦人的限制.SELECT使用行限制子句时,子句中不可能有两列相同的列.例如,这会在Oracle 12.1中引发ORA-00918
SELECT t.id, u.id FROM t, u FETCH FIRST 10 ROWS ONLY
所有版本12.1,12.2,18.0的手册中都记录了这一限制:
解决方法显然是为列添加别名
SELECT t.id AS t_id, u.id AS u_id FROM t, u FETCH FIRST 10 ROWS ONLY
或者使用ROWNUM或窗口功能使用"经典"分页.
但奇怪的是,带有不明确ID列的原始查询从Oracle 12.2开始运行得很好.这是文档错误还是未记录的功能?
小智 0
我注意到你有一个隐式连接。看看显式加入时问题是否消失会很有趣。我想知道 Oracle 是否在幕后基于 id=id 进行联接,而不是使用您分配给它们的表别名。
这也可以解释解决问题的列别名。尝试显式加入;这可能会迫使 Oracle 使用表别名并解决它认为看到的歧义。