sql 先排序,再取出前面N条的问题

zw520lbzw520lb 2017-02-24 10:13:20

SELECT
B.*
FROM
TABLE_B B
INNER JOIN
(
SELECT B.UNIQUEKEY
FROM
(
SELECT B.UNIQUEKEY
FROM TABLE_B B
WHERE 。。。
ORDER BY TABLE_B.NAME, TABLE_B.AGE, TABLE_B.CODE
) B
WHERE ROWNUM<5001
) A ON A.UNIQUEKEY =B.UNIQUEKEY


代码如上,逻辑很简单,就是我要根据我的几个排序列,先排好序,再取出前面5000条,
最里层的select上只有UNIQUEKEY一列字段,因为要排序的字段可能会很多,而且数据量几十万,如果列加多了会慢,这个先不管。
其中的这段代码
SELECT B.UNIQUEKEY
FROM
(
SELECT B.UNIQUEKEY
FROM TABLE_B B
WHERE 。。。
ORDER BY TABLE_B.NAME, TABLE_B.AGE, TABLE_B.CODE
) B
WHERE ROWNUM<5001


先排序再取前5000条记录,这样是没有问题的。
我想问的是,我又在外层做了一个inner join,那样最后显示的结果集还会不会是我想要的顺序呢?
...全文
708 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 2017-02-25
  • 打赏
  • 举报
回复

select t.*, x.*
from (select rownum rn, tt.*
        from (select ttt.* from ttt order by pk desc) tt
       where rownum <= 5000) t
inner join x on t.col1 = x.col1
order by t.rn
-- where t.rn > 4000

zw520lbzw520lb 2017-02-25
  • 打赏
  • 举报
回复
楼上的意思是不是最后再加一个order by

	SELECT 
	B.*	
	FROM
	TABLE_B B
	INNER JOIN
	(
		SELECT B.UNIQUEKEY
		FROM 
		(
			SELECT B.UNIQUEKEY
			FROM TABLE_B B			
			WHERE 。。。
			ORDER BY TABLE_B.NAME, TABLE_B.AGE, TABLE_B.CODE
		) B
		WHERE ROWNUM<5001
	) A ON A.UNIQUEKEY =B.UNIQUEKEY
	ORDER BY TABLE_B.NAME, TABLE_B.AGE, TABLE_B.CODE
卖水果的net 2017-02-24
  • 打赏
  • 举报
回复
我想问的是,我又在外层做了一个inner join,那样最后显示的结果集还会不会是我想要的顺序呢? 很有可能不是你这个顺序; 你可以把这个顺序先放在一个字段,关联查询后,再按这个字段排一下序

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧