我有一个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
这在oracle文档中有记录:
对row_limiting_clause的限制
如果选择列表包含具有相同名称的列,并且您指定row_limiting_clause,则将发生ORA-00918错误。无论名称相同的列是在同一表中还是在不同表中,都会发生此错误。您可以通过为名称相同的列指定唯一的列别名来解决此问题。
即使SELECT
查询有效,FETCH FIRST|NEXT
但如果两个列名相同,使用后,它将引发错误。
您应该为SELECT
子句中的所有列分配不同的别名。