1

我无法理解 SQL 查询输出:

SQL> select distinct(STATUS) from TMP_ORDER_ACTION_PSTN_CP_11035;

    InDelivery_SOMBe 
    In Delivery
    Complete
    Amended
    Cancelled
    Failed InComplete
 1   SQL> select count(*) from TMP_ORDER_ACTION_PSTN_CP_11035 where
    STATUS='Complete';
          1484
 2   SQL>  select count(*) from TMP_ORDER_ACTION_PSTN_CP_11035 where STATUS
    != 'Complete';
          3167
  3  SQL> select count(*) from TMP_ORDER_ACTION_PSTN_CP_11035;
          5091

第 1 次和第 2 次查询的计数总和应该与总计数(3 次查询)相同。为什么总和与总计数不同?这似乎是一个转储问题,但我不知道为什么会这样。请注意,我的问题根本与空检查无关。它是 sum(1+2)=3.1484+3167 !=5091。为什么结果不同?

4

3 回答 3

4

WHERE STATUS = NULL不会工作。没有什么等于NULL

尝试IS而不是=...

select count(*) from TMP_ORDER_ACTION_PSTN_CP_11035 where STATUS IS null
于 2012-08-03T10:16:44.690 回答
4

我的猜测是 NULL 值,它与您的任何 WHERE 子句都不匹配,包括最后一个。尝试

select count(*) from TMP_ORDER_ACTION_PSTN_CP_11035 where STATUS is null;

where status = null从来都不是真的,也不是where null = null。你必须使用is null.

第 1 次和第 2 次查询的计数总和应该与总计数(3 次查询)相同。为什么总和与总计数不同?

不,因为带有 NULL 的记录不匹配查询 1 或查询 2,但它们被计入查询 3。

1 + 2 + IS NULL 应该等于 3。

于 2012-08-03T10:16:03.150 回答
0

尝试这个:

假设 p_key 是表的主键,

select count(p_key) from TMP_ORDER_ACTION_PSTN_CP_11035 where STATUS='Complete';
select count(p_key) from TMP_ORDER_ACTION_PSTN_CP_11035 where STATUS <> 'Complete';
select count(p_key) from TMP_ORDER_ACTION_PSTN_CP_11035 ;
于 2012-08-03T18:02:00.743 回答