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:
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;
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!