MySQL は IN 式の NULL 値をどのように処理しますか?

Barbara Streisand
リリース: 2024-10-23 18:17:05
オリジナル
305 人が閲覧しました

How Does MySQL Handle NULL Values in IN Expressions?

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 エラー値を含む行も取得するには、いくつかの方法があります。

  1. COALESCE を使用して NULL 値をデフォルト値に置き換えます:
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and COALESCE(Error,'') not in ('Timeout','Connection Error');
ログイン後にコピー
  1. IS NULL と OR を使用して NULL 値を明示的にチェックします:
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and (Error IS NULL OR Error not in ('Timeout','Connection Error'));
ログイン後にコピー
  1. CASE を使用して、エラー値に基づいてブール結果を割り当てます:
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 サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!