Oracle SQL“列定义不明确”,仅使用“ FETCH FIRST n ROWS”

Qw3*_*3ry 2 sql oracle

我有一个SELECT A.ID, B.ID FROM A, B很好的查询。一旦添加FETCH FIRST n ROWS ONLY到它,查询就会失败并显示错误消息

SQL错误[918] [42000]:ORA-00918:列定义不明确

据我了解,该错误指的是不明确的SELECT子句,不应由引起FETCH FIRST n ROWS ONLY

我会错过一些可以证明这种行为合理的东西吗?还是这是一个错误?

我知道在指定显式列别名时可以忽略此行为。我想知道,为什么SELECT A.ID, B.ID FROM A, B有效,而SELECT A.ID, B.ID FROM A, B FETCH FIRST 10 ROWS ONLY没有。

Oracle版本是12.1.0.2.0

Tej*_*ash 5

这在oracle文档中有记录

对row_limiting_clause的限制

如果选择列表包含具有相同名称的列,并且您指定row_limiting_clause,则将发生ORA-00918错误。无论名称相同的列是在同一表中还是在不同表中,都会发生此错误。您可以通过为名称相同的列指定唯一的列别名来解决此问题。

即使SELECT查询有效,FETCH FIRST|NEXT但如果两个列名相同,使用后,它将引发错误。

您应该为SELECT子句中的所有列分配不同的别名。