ホームページ >データベース >mysql チュートリアル >MySQL クエリで IN キーワードを使用して NULL 値を処理する方法は?

MySQL クエリで IN キーワードを使用して NULL 値を処理する方法は?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-24 05:45:02770ブラウズ

How to Handle NULL Values with IN Keyword in MySQL Queries?

MySQL IN キーワードで NULL 値が除外される

MySQL クエリで IN キーワードを使用して特定の値に基づいて行をフィルタリングすると、予期しない結果が発生する可能性がありますNULL 値を操作するときに発生します。この記事では、この動作の背後にある理由を調査し、そのようなシナリオで NULL 値を正しく処理する方法を提供します。

あなたが言及したクエリ:

select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and Error not in ('Timeout','Connection Error');

驚くべきことに、Error 列に NULL 値が含まれる行が除外されます。 。これは、IN キーワードが意味的に次と同等であるためです。

Error <> 'TimeOut' AND Error <> 'Connection Error'

NULL 値の特性により、上記の式は true と評価できません。 NULL 値は、それ自体を含め、他の値と等しくありません。したがって、Error 列に NULL 値を含む行はフィルターで除外されます。

結果セットに NULL 値を含めるには、次のようにクエリを調整できます:

  • COALESCE (Error,'') not in ('Timeout','Connection Error'): これにより、比較する前に、Error 列の NULL 値が空の文字列に置き換えられます。
  • Error IS NULL OR Error not in ('Timeout','Connection Error'): これは、NULL 値と一致しない値の両方を明示的にチェックします。
  • CASE WHEN Error IS NULL THEN 1 ELSE Error not in ('Timeout','Connection Error') THEN 1 END = 1: これは CASE ステートメントを使用して NULL と一致する値の両方を 1 に変換し、その後 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');

NULL 値は不定であるため除外されるため、このクエリは msg が「hi」である行のみを返します。

以上がMySQL クエリで IN キーワードを使用して NULL 値を処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。