澄清Oracle中的rownum操作顺序

时间:2014-01-20 17:16:54

标签: sql oracle select oracle11g rownum

根据此link,在查询中使用rownum时,会按以下操作顺序调用它。

The FROM/WHERE clause goes first.
ROWNUM is assigned and incremented to each output row from the FROM/WHERE clause.
SELECT is applied.
GROUP BY is applied.
HAVING is applied.
ORDER BY is applied.

我想知道AND在此列表中的归类位置。是否会与WHERE同时进行评估?如果WHERErownumAND没有?

怎么办?

2 个答案:

答案 0 :(得分:1)

AND在这方面没有任何作用。在构造结果集时,将rownum分配给最外层排序之前的结果。对ROWNUM进行过滤很难从执行计划的深层提供结果。因此,例如像where rownum > 5这样的构造不会返回任何行。

希望这会有所帮助。如果没有,请详细说明您的问题和/或解释您的要求。有些替代方案有时更好,例如row_number()

答案 1 :(得分:-1)

我刚刚进行了一项更新工作,其中field_value不为null且rownum = 1。 因为rownum = 1是一行有field_value = null的行,它是累回的行,然后更新中没有动作。

因此,在Where子句中,还有一个操作顺序。 需要在它周围放置()或使其成为子查询,以确保rownum是在where cause的其他部分的结果上。

对于我的情况,我使用了distinct而不是rownum = 1.