use*_*605 -3 sql oracle oracle10g
由于我无法rownum在查询中使用,我如何使用rowid从第2行到第4行的结果使用rowid或除了之外的其他可能的解决方案rownum.
这是我当前的查询,它将检索第2和第4行:
SELECT * FROM Record a
WHERE
2 = (SELECT COUNT (rowid)
FROM Record b
WHERE a.rowid >= b.rowid)
UNION
SELECT * FROM Record a
WHERE
4 = (SELECT COUNT (rowid)
FROM Record c
WHERE a.rowid >= c.rowid);
Run Code Online (Sandbox Code Playgroud)
也许还有其他更好的方法吗?TQ
如果你不能使用rownum,那么使用row_number():
SELECT a.*
FROM (SELECT a.*, ROW_NUMBER() OVER (ORDER BY rowid) as seqnum
FROM Record a
) a
WHERE seqnum BETWEEN 2 and 4;
Run Code Online (Sandbox Code Playgroud)
注意:??用于订购列.SQL表表示无序集,因此除了引用排序列之外,没有第一行或第二行的概念.你可以用它rowid来达到这个目的.
在Oracle 12c中,您将使用OFFSET/ FETCH:
SELECT a.*
FROM Record a
OFFSET 1 ROWS
FETCH FIRST 3 ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)
我应该指出你可以使用rownum.你不能这样做:
SELECT a.*
FROM Record a
WHERE rownum BETWEEN 2 and 4;
Run Code Online (Sandbox Code Playgroud)
您可以在子查询中使用它:
SELECT a.*
FROM (SELECT a.*, rownum as seqnum
FROM Record a
) a
WHERE seqnum BETWEEN 2 and 4;
Run Code Online (Sandbox Code Playgroud)
请注意,如果没有ORDER BY,则无法保证结果以任何顺序返回,包括rowid订单.