为什么我必须在 WHERE 子句中为 ROWNUM 指定别名?

问题描述 投票:0回答:1

我正在完成有关对称对的 HackerRank 问题,并通过以下 SQL 查询成功 (Oracle 11g):

SELECT
    DISTINCT F1.X, F1.Y
FROM
    (
        SELECT
            X, Y, ROWNUM AS ROW_NUM
        FROM
            Functions
    ) F1,
    (
        SELECT
            X, Y, ROWNUM AS ROW_NUM
        FROM
            Functions
    ) F2
WHERE
    F1.X = F2.Y
    AND F2.X = F1.Y
    AND F1.X <= F1.Y
    AND F1.ROW_NUM != F2.ROW_NUM
ORDER BY
    F1.X;

但是,当我尝试使用以下查询来简化它时:

SELECT
    DISTINCT F1.X, F1.Y
FROM
    Functions F1,
    Functions F2
WHERE
    F1.X = F2.Y
    AND F2.X = F1.Y
    AND F1.X <= F1.Y
    AND F1.ROWNUM != F2.ROWNUM
ORDER BY
    F1.X;

我收到以下错误:

ORA-01747: invalid user.table.column, table.column, or column specification

为什么这不起作用?为什么我必须给

ROWNUM
起一个别名?

oracle oracle11g
1个回答
0
投票

ROWNUM
是保留字;它不是表或内联视图的(伪)列。

table_name.column_name
inline_view.column_alias
是用于引用表的列或内联视图中定义的别名的语法。
ROWNUM
表中没有
Functions
列。

© www.soinside.com 2019 - 2024. All rights reserved.