当前位置: 代码迷 >> Oracle技术 >> 请问两个select count(1) SQL 查询出结果不一致
  详细解决方案

请问两个select count(1) SQL 查询出结果不一致

热度:119   发布时间:2016-04-24 08:09:18.0
请教两个select count(1) SQL 查询出结果不一致


请教 一个问题,同样的SQL(select count(1)……),在SQl后面加上 ORDER BY ID  查询出来的结果是4.

不添加 ORDER BY ID  查询出来的结果是2.
请教一下 这是什么原因导致的呢?






------解决方案--------------------
把里面union的sql单独查询看看什么结果
------解决方案--------------------
可能有些是null吧 order by 就没了
------解决方案--------------------
引用:
Quote: 引用:

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

单独的话 查出来的 结果是对的。

既然记录数不多,建议对比一下记录明细,看看条件字段是不是存在null。
不用count,查询明细看看。。
------解决方案--------------------
不知道这是什么原因,貌似不是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
------解决方案--------------------
很明显是NULL引起的。
    你把order by 之前的结果集查出来,用select * from ...   你会发现,有四行,其中两行的 ID 是 空值,空值怎么会排序呢?
    一切运算和NULL,结果都是null,在逻辑表达式中表现为:非真!  
    简单地说,你用了含NULL列做了排序,ID为NULL的记录在排序前,被默认地过滤掉了,所以只有两行结果。
   
  相关解决方案