由于我无法在查询中使用rownum
,如何使用rowid
使用rowid
或除{{1}之外的其他可能解决方案从第2行到第4行获取结果}。
这是我当前的查询,它将检索第2行和第4行:
rownum
也许还有其他更好的方法吗? TQ
答案 0 :(得分:5)
如果您无法使用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;
注意:??
用于订购列。 SQL表表示无序集,因此除了引用排序列之外,没有第一行或第二行的概念。您可以将rowid
用于此目的。
在Oracle 12c中,您将使用OFFSET
/ FETCH
:
SELECT a.*
FROM Record a
OFFSET 1 ROWS
FETCH FIRST 3 ROWS ONLY;
我应该指出你可以使用rownum。你不能这样做:
SELECT a.*
FROM Record a
WHERE rownum BETWEEN 2 and 4;
您可以在子查询中使用它:
SELECT a.*
FROM (SELECT a.*, rownum as seqnum
FROM Record a
) a
WHERE seqnum BETWEEN 2 and 4;
请注意,如果没有ORDER BY
,则无法保证结果以任何顺序返回,包括rowid
订单。
答案 1 :(得分:1)
如果您想避免rownum
和row_number
,请使用sum
:
select *
from (
select sum(1) over ( order by rowid /* or whatever you need */ ) as rn,
r.*
from record
)
where rn between 2 and 4
诀窍只在于sum(1)
在count(1)
值上count(rowid)
或count
或not null
提供的内容与row_number
相同。这与使用rownum
或sum
计算行数相同。
这样您就可以使用row_number
来计算row_number
,而无需明确写出“rownum
”或“SQL> create table testTab(x) as ( select level from dual connect by level <= 6);
Table created.
SQL> select t.*,
2 count(1) over (order by rowid desc) as count,
3 sum(1) over (order by rowid desc) as sum,
4 row_number() over (order by rowid desc) as rowNumber
5 from testTab t;
X COUNT SUM ROWNUMBER
---------- ---------- ---------- ----------
6 1 1 1
5 2 2 2
4 3 3 3
3 4 4 4
2 5 5 5
1 6 6 6
”。
#!/bin/bash\
/usr/bin/mysqldump --user=USERNAME --password=PASSWORD --host=localhost DBNAME > /home/CPANELUSER/public_html/FOLDER/FILENAME.sql
外部查询只应用过滤器。
答案 2 :(得分:0)
使用Oracle 12c,您现在可以轻松地进行行限制。在您的场景中,您可以执行以下操作:
SELECT *
FROM RECORD
OFFSET 1 ROWS FETCH NEXT 1 ROWS ONLY
UNION
SELECT *
FROM RECORD
OFFSET 3 ROWS FETCH NEXT 1 ROWS ONLY