不知道这是什么原因,貌似不是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
最后是把 UNION ALL 换成 了 UNION 就好了,,但是 现在仍然不知道 为什么会这样 ,希望 高手解答
很明显是NULL引起的。 你把order by 之前的结果集查出来,用select * from ... 你会发现,有四行,其中两行的 ID 是 空值,空值怎么会排序呢? 一切运算和NULL,结果都是null,在逻辑表达式中表现为:非真! 简单地说,你用了含NULL列做了排序,ID为NULL的记录在排序前,被默认地过滤掉了,所以只有两行结果。
...
select ... from ...
形式看看
另外,如果是count,order by语句也没用处,而且影响效率
既然记录数不多,建议对比一下记录明细,看看条件字段是不是存在null。
不用count,查询明细看看。。
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
你把order by 之前的结果集查出来,用select * from ... 你会发现,有四行,其中两行的 ID 是 空值,空值怎么会排序呢?
一切运算和NULL,结果都是null,在逻辑表达式中表现为:非真!
简单地说,你用了含NULL列做了排序,ID为NULL的记录在排序前,被默认地过滤掉了,所以只有两行结果。