我有以下 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%'
。我尝试在之后添加 where 子句(...) from ATABLE
但它产生了一个错误......
帮助?谢谢。
PS:我使用的是Oracle 10g R2。
rownum 是一个伪列,用于计算结果集中的行数after已应用 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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)