是很奇怪的问题,这么理解,你ORDER BY 索引的话,那么首先进行索引排序,重复的索引排除了。

解决方案 »

  1.   

    使用with
            ...
          select ... from ...
    形式看看
    另外,如果是count,order by语句也没用处,而且影响效率 
      

  2.   

    把里面union的sql单独查询看看什么结果
      

  3.   

    可能有些是null吧 order by 就没了
      

  4.   

    单独的话 查出来的 结果是对的。
    既然记录数不多,建议对比一下记录明细,看看条件字段是不是存在null。
    不用count,查询明细看看。。
      

  5.   

    不知道这是什么原因,貌似不是null的原因,在oracle 10g做的测试,test1 
    A       B
    1 AAAA
    2 null
    3 null
    4 DDDD
    2 null
    3 null
    test2
    A
    1
    2
    3
    4
    然后SELECT COUNT(1) FROM (SELECT b FROM test a,test2 b WHERE a.a = b.a) ;
    SELECT COUNT(1) FROM (SELECT b FROM test a,test2 b WHERE a.a = b.a) ORDER BY b;
    SELECT COUNT(1) FROM test a;
    SELECT COUNT(1) FROM (SELECT b FROM test a) ;
    SELECT COUNT(1) FROM (SELECT b FROM test a) ORDER BY b;
    得到的结果都是6
      

  6.   

    最后是把 UNION  ALL  换成 了 UNION   就好了,,但是 现在仍然不知道 为什么会这样 ,希望 高手解答
      

  7.   

    很明显是NULL引起的。
        你把order by 之前的结果集查出来,用select * from ...   你会发现,有四行,其中两行的 ID 是 空值,空值怎么会排序呢?
        一切运算和NULL,结果都是null,在逻辑表达式中表现为:非真!  
        简单地说,你用了含NULL列做了排序,ID为NULL的记录在排序前,被默认地过滤掉了,所以只有两行结果。