假设有t1,t2两张表
我写了这么一条sql:
select(select t1.name,t2.name from t1,t2 where t1.fk_t2 = t2.id order by t2.name)where rownum <=100
查出了12条数据:
1,a 
2,a 
3,a 
4,a 
5,a 
6,a  
7,b  
8,b  
9,b  
10,b  
11,b 
12,b
但是如果把rownum的数量改为10的话
select(select t1.name,t2.name from t1,t2 where t1.fk_t2 = t2.id order by t2.name)where rownum <=100
查出来的结果是这样的
1,a 
2,a 
3,a 
4,a 
5,a 
6,a  
7,b  
8,b  
9,b  
12,b  
导致的结果是我的分页页面中“12,b”这条数据在第1页和第2页都出现了一次但是“10,b”这条数据却没有出现。
当然了,我的解决方法就是多加了一个order字段“order by t2.name,t1.name” 。
但是我还是没弄明白为什么上面两条sql查出的数据顺序不一致了,应该是oracle底层的实现问题把,
不知道大家搞明白我的问题没??

解决方案 »

  1.   

    因为t1,t2表有关联,它把先关联到的内容(条件t1.fk_t2 = t2.id )先显示出来
    你分析一下t1,t2表里面分别是什么数据?
      

  2.   

    第二条sql写错了应该是:
    select(select t1.name,t2.name from t1,t2 where t1.fk_t2 = t2.id order by t2.name)where rownum <=10
    回楼上:第一条sql都搜出来了,共12条
      

  3.   

    t2.name不是唯一的,估计是他引起的,
    你用t1.name来order by 就可以了嘛.
    select(select t1.name,t2.name from t1,t2 where t1.fk_t2 = t2.id order by t1.name)where rownum <=10