我写了一个sql语句,后来加上rownum以后,其他条件不变,发现加上rownum以后整个数据的顺序发生变化了,不知道为什么,请高手指教?
我的sql语句如下:
select tbl_dbscd.* from tbl_dbscd where f_id in (60,61,62,63,64,65,53,36,37,38,39,40)
查询出来以后的数据顺序和括号里面的顺序成反的了,就是顺序是 40,39,38,37,53,65,64,63,62,61,60
但是我执行 select rownum,tbl_dbscd.* from tbl_dbscd where f_id in (60,61,62,63,64,65,53,36,37,38,39,40)语句以后这个顺序就完全打乱了,不知道是按照什么排列的了,顺序是 40,53,60,61,62,63,64,65,37,38,39。
谁能告诉我原因啊,谢谢

解决方案 »

  1.   

    在查询的时候,如何不加条件,即ASC、DESC的话,默认是按照第一列的升序来排列的,即ASC,当你把rownum放在第一列时,自然就按照rownum的升序来排列了
      

  2.   

    @minmin_god 
    你说的好像不对吧,刚才我把rownum放在后面了,结果还是和放到前面的一样 。
    40,53,60,61,62,63,64,65,37,38,39这个顺序
      

  3.   

    你加个order by 不就行了
      

  4.   

    你不order by,顺序是没有意义的
      

  5.   

    对于大部分我们创建的表都是堆表,它的排序都不是按顺序排列的,在它的数据结构中数据要存放在数据块中,
    而每块中存放的行数是按你所存取的数据字节大小来计算的,在存放时,oracle会自由的分配空间
    这里涉及的东西挺多的,也只了解这么一点,但一句话:在表中如果不是IOT或聚簇等表,它的排序都是杂乱无章章的。
      

  6.   

    我现在是想按照括号里面id的顺序进行排序的,这个括号里面id的顺序是不固定的,是由用户来自己调整的,所以用order by的方式不行的
      

  7.   

    可以的
    --f_id in (60,61,62,63,64,65,53,36,37,38,39,40)
    order by instr(','||'60,61,62,63,64,65,53,36,37,38,39,40'||',' , ','||id||',')