0

Customer テーブルがあり、クライアントはこのテーブルからレコードを物理的に削除したくないので、TINYINT フィールド "IsDeleted" を使用して削除された顧客を追跡します。

現在、削除された顧客を除外する必要がある状況にありますが、クエリに従うのに疲れると、レコードの数が少なくなります

select count(*) from customer where IsDeleted <> 1; (Count = 1477)

次に、次の

select count(*) from customer where (IsDeleted = 0 or IsDeleted is  null); (Count = 1552)

上記のクエリ数が異なるのはなぜですか? 「IsDeleted <> 1」チェックで「NULL」値がカウントされないのはなぜですか?

提案してください。

4

3 に答える 3

0

Duniyadnd と triclosan が指摘するように、これは IsDeleted の列の種類が原因です。
int 列タイプと varchar 列タイプの使用の違いを確認できるように、右側のパネルでクエリを変更します。sqlfiddle.com/#!2/7bf0a/5

于 2013-01-16T11:52:02.290 に答える
0

NULL 値の使用比較操作を修正することはできません。Not NULL オプションを使用してIsDeletedの型を変更することを検討してください。enum('N','Y')

于 2013-01-16T11:28:07.810 に答える
0

Null は int ではありません。<> 1 を実行するとすぐに、int のみが表示されることを意味します。Null は、理想的には存在しないものを意味します (そのため、テーブルに 0 を格納する場合に備えて、多くの人が 0 の代わりに Null を使用します)。

列に null、0、および 1 の値しかない場合、isDeletedおそらく 2 つのクエリ (1522-1477) の違いが、テーブル内の null の総数 (75) であることがわかります。

于 2013-01-16T11:28:47.683 に答える