我有以下 SQL 查询:
select
ID, COLUMN1, COLUMN2
from
(select ID, COLUMN1, COLUMN2, row_number() over (order by 2 DESC) NO from A_TABLE)
where
NO between 0 and 100
我想要做的是选择查询的前 100 条记录
select ID, COLUMN1, COLUMN2 from ATABLE order by 2 DESC
以下是问题:
order by
条款不起作用。我注意到我必须添加另一个 order by 2 DESC
条款,就在 (...) from ATABLE
之后,让我的查询工作。有什么我做错了吗?或者这是预期的行为? where
条款?假设我只需要选择表的前 100 条记录 where COLUMN1 like '%value%'
.我试过在 (...) from ATABLE
之后添加 where 子句但它产生了一个错误... 帮助?谢谢。
PS:我使用的是 Oracle 10g R2。
最佳答案
rownum 是一个伪列,用于在应用 where 子句后对结果集中的行进行计数。
这是你想要得到的吗?
SELECT *
FROM (
SELECT id, column1, column2
FROM atable ORDER BY 2 DESC
)
WHERE ROWNUM < 100;
因为它是一个伪列,它严格是由 where 子句产生的行计数器,所以它不允许您进行分页(即在 200 和 300 之间)。
这可能就是你要找的:
SELECT *
FROM
(SELECT a.*, rownum rnum FROM
(SELECT id, column1, column2 FROM atable ORDER BY 2 DESC) a WHERE rownum <= 300)
WHERE rnum >= 200;
关于使用 Row_Number、order by 和 where 子句进行 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/834702/