现在又有这样的需求,根据某个字段排序后查询出数据然后再取前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中就没有解决这样问题的办法吗?

解决方案 »

  1.   

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

  2.   

    换一个思路怎么样?先排序,然后再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
    不知道写的对不对,没有测试数据的说。
      

  3.   

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