ホームページ > データベース > mysql チュートリアル > MYSQL の IN キーワードは比較で NULL 値をどのように処理しますか?

MYSQL の IN キーワードは比較で NULL 値をどのように処理しますか?

Linda Hamilton
リリース: 2024-10-23 21:43:30
オリジナル
386 人が閲覧しました

How Does MYSQL's IN Keyword Handle NULL Values in Comparisons?

MYSQL IN キーワードによる NULL 値の処理

SQL クエリでは、指定された値のセットに基づいて結果をフィルタリングするために IN キーワードがよく使用されます。ただし、NULL 値を扱う場合、MYSQL の IN キーワードは考慮が必要な独特の動作を示します。

問題: NULL 値を除外する IN キーワード

次のクエリを考えてみましょう:

select count(*) from Table1 where CurrentDateTime>='2012-05-28 15:34:02.403504' and Error not in ('Timeout','Connection Error');
ログイン後にコピー

このクエリは、エラー値が「タイムアウト」または「接続エラー」である行を除外することを目的としていますが、エラーが NULL である行は予期せず除外されます。 NULL 値を考慮するには、追加の条件 (またはエラーが NULL である) を追加する必要があります。

NULL 除外の理由

IN キーワードは、ブール値 ( 1/0)。ただし、場合によっては、ブール値の代わりに NULL を返すことがあります。 Error が NULL の場合、IN 式は次のようになります。

Error <> 'Timeout' AND Error <> 'Connection Error'
ログイン後にコピー

ここでは Null 比較ルールが適用されます。 Error の値が NULL であるため、式は true または false に評価できません。

NULL 値を含める解決策

NULL 値を含む行を含めるには、次の方法があります。次の解決策を使用します:

  • IN で COALESCE:

    COALESCE(Error,'') not in ('Timeout','Connection Error');
    ログイン後にコピー
  • OR 条件 IS NULL :

    Error IS NULL OR Error not in ('Timeout','Connection Error');
    ログイン後にコピー
  • 短絡を伴う CASE 式:

    CASE WHEN Error IS NULL THEN 1
     ELSE Error not in ('Timeout','Connection Error') THEN 1
     END = 1
    ログイン後にコピー

次のデータについて考えます:

create table tbl(msg varchar(100) null, description varchar(100) not null);
insert into tbl values('hi', 'greet'), (null, 'nothing');
ログイン後にコピー

クエリ:

select 'hulk' as x, msg, description
from tbl where msg not in ('bruce','banner');
ログイン後にコピー

NOT IN 式が NULL と評価されるため、「hi」のみが返されます。 NULL メッセージ値を持つ行の場合。

結論

MYSQL の IN キーワードは、比較中に NULL 値を特別なケースとして扱います。 IN を使用する開発者は、この動作を認識し、NULL 値を含む行の除外や誤った解釈を避けるために適切な処理を実装する必要があります。

以上がMYSQL の IN キーワードは比較で NULL 値をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート