Oracle多表排序查询后取根据ROWNUM取数据

时间:2020-12-05 00:49:34
    现在又有这样的需求,根据某个字段排序后查询出数据然后再取前100条数据,在MySQL中的时候是这样的:

SELECT main.*,space.* FROM tb_show  main LEFT JOIN tb_space space ON space.userid=main.userid  ORDER BY main.credit DESC LIMIT 0,100

这样就根据credit排序后取出了100条数据,先排序再取
移植到Oracle中后我是这样写的:

SELECT * FROM (SELECT main.*,space.* FROM tb_show  main LEFT JOIN tb_space space ON space.userid=main.userid  ORDER BY main.credit DESC) WHERE ROWNUM BETWEEN 1 AND 100

由于两个表中有相同的字段所以报错说SELECT * 这个*这里有问题,说未明确指定列,很多人说解决的办法就是里层查询中把明确查询的列写出来,这样是不是太麻烦了,我一张表有40多个列,而且又不知道后面那些列要用,哪些列不用,我想问一下,Oracle中就没有解决这样问题的办法吗?

7 个解决方案

#1


没有了!
请高人指点!

#2


应该是由于 你两张表里有同名字段造成的。

#3


你可以用oracle的分析函数.row_number() over 然后再外进行一层子查询应该就好了.

#4


引用 2 楼 psufnxk2008 的回复:
应该是由于 你两张表里有同名字段造成的。
应该是,没办法。必须指定

#5


换一个思路怎么样?先排序,然后再left join怎么样呢?考虑过这个方法没有呢?


SELECT * from (SELECT * FROM tb_show a order by a.credir DESC ) main LEFT JOIN  tb_space b on a.userid=b.userid and ROWNUM<101


不知道写的对不对,没有测试数据的说。

#6


在oracle8以前的版本怎么实现排序后再分页,请教一下!

#7


的确没有了,还是把列全写出来了

#1


没有了!
请高人指点!

#2


应该是由于 你两张表里有同名字段造成的。

#3


你可以用oracle的分析函数.row_number() over 然后再外进行一层子查询应该就好了.

#4


引用 2 楼 psufnxk2008 的回复:
应该是由于 你两张表里有同名字段造成的。
应该是,没办法。必须指定

#5


换一个思路怎么样?先排序,然后再left join怎么样呢?考虑过这个方法没有呢?


SELECT * from (SELECT * FROM tb_show a order by a.credir DESC ) main LEFT JOIN  tb_space b on a.userid=b.userid and ROWNUM<101


不知道写的对不对,没有测试数据的说。

#6


在oracle8以前的版本怎么实现排序后再分页,请教一下!

#7


的确没有了,还是把列全写出来了