MySQL IN キーワードと NULL 値
MySQL の IN キーワードは、指定された式と値のリストの間の比較を実行し、ブール値の結果 (TRUE/FALSE)。ただし、特定のシナリオでは、MySQL は NULL 値を独自の方法で処理します。
次のクエリを考えてみましょう:
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and Error not in ('Timeout','Connection Error');
このクエリは、CurrentDateTime 値が より大きい行を Table1 から取得することを目的としています。 「2012-05-28 15:34:02.403504」および「タイムアウト」または「接続エラー」と等しくないエラー値。驚くべきことに、このクエリはエラーの NULL 値を持つ行を除外します。
MySQL は IN 式の NULL 値を無視するのはなぜですか?
MySQL は NULL を不明または未定義の値として扱います。 IN 式で使用すると、MySQL は NULL を TRUE でも FALSE でも評価しないため、結果は不明になります。したがって、IN 式はそれ自体 NULL と評価されます。
クエリの修正
NULL エラー値を含む行も取得するには、いくつかの方法があります。
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and COALESCE(Error,'') not in ('Timeout','Connection Error');
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and (Error IS NULL OR Error not in ('Timeout','Connection Error'));
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and CASE WHEN Error IS NULL THEN 1 ELSE Error not in ('Timeout','Connection Error') THEN 1 ELSE 0 END = 1;
これらの変更により、NULL エラー値を持つ行がクエリ結果に確実に含まれるようになります。
以上がMySQL は IN 式の NULL 値をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。