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

私の推測では、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 +ISNULLは3に等しい必要があります。

于 2012-08-03T10:16:03.150 に答える
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 に答える
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 に答える