Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah MySQL Mengendalikan Nilai NULL dalam Ungkapan IN?

Bagaimanakah MySQL Mengendalikan Nilai NULL dalam Ungkapan IN?

Barbara Streisand
Barbara Streisandasal
2024-10-23 18:17:05305semak imbas

How Does MySQL Handle NULL Values in IN Expressions?

MySQL IN Kata Kunci dan Nilai NULL

Kata kunci IN dalam MySQL melakukan perbandingan antara ungkapan yang diberikan dan senarai nilai, mengembalikan hasil boolean (BENAR/SALAH). Walau bagaimanapun, dalam senario tertentu, MySQL mengendalikan nilai NULL dengan cara yang berbeza.

Pertimbangkan pertanyaan berikut:

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

Pertanyaan ini bertujuan untuk mendapatkan semula baris daripada Jadual1 yang mempunyai nilai CurrentDateTime lebih besar daripada '2012-05-28 15:34:02.403504' dan nilai Ralat yang tidak sama dengan 'Tamat Masa' atau 'Ralat Sambungan'. Yang menghairankan, pertanyaan ini mengecualikan baris dengan nilai NULL untuk Ralat.

Mengapa MySQL Mengabaikan Nilai NULL dalam Ungkapan IN?

MySQL menganggap NULL sebagai nilai yang tidak diketahui atau tidak ditentukan. Apabila digunakan dalam ungkapan IN, MySQL menilai NULL sebagai tidak BENAR atau SALAH, menghasilkan keputusan yang tidak diketahui. Oleh itu, ungkapan IN menilai kepada NULL sendiri.

Membetulkan Pertanyaan

Untuk mendapatkan semula baris dengan nilai Ralat NULL juga, terdapat beberapa pendekatan:

  1. Gunakan COALESCE untuk menggantikan nilai NULL dengan nilai lalai:
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and COALESCE(Error,'') not in ('Timeout','Connection Error');
  1. Gunakan IS NULL dan OR untuk menyemak nilai NULL secara eksplisit:
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. Gunakan CASE untuk menetapkan hasil boolean berdasarkan nilai Ralat:
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;

Pengubahsuaian ini memastikan bahawa baris dengan nilai Ralat NULL disertakan dalam hasil pertanyaan.

Atas ialah kandungan terperinci Bagaimanakah MySQL Mengendalikan Nilai NULL dalam Ungkapan IN?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn