Layanan Kata Kunci MYSQL IN terhadap Nilai NULL
Pertanyaan SQL selalunya menggunakan kata kunci IN untuk menapis hasil berdasarkan set nilai yang ditentukan. Walau bagaimanapun, apabila berurusan dengan nilai NULL, kata kunci IN MYSQL mempamerkan gelagat unik yang memerlukan pertimbangan.
Masalah: IN Kata Kunci Tidak Termasuk Nilai NULL
Pertimbangkan pertanyaan berikut:
select count(*) from Table1 where CurrentDateTime>='2012-05-28 15:34:02.403504' and Error not in ('Timeout','Connection Error');
Sebab Pengecualian NULL
Kata kunci IN membandingkan ungkapan menggunakan nilai boolean ( 1/0). Walau bagaimanapun, dalam beberapa kes, ia boleh mengembalikan NULL dan bukannya nilai boolean. Apabila Ralat adalah NULL, ungkapan IN menjadi:
Peraturan perbandingan nol digunakan di sini. Oleh kerana nilai Ralat adalah NULL, ungkapan tidak boleh menilai sama ada benar atau salah.
Error <> 'Timeout' AND Error <> 'Connection Error'
Penyelesaian untuk Termasuk Nilai NULL
Untuk memasukkan baris dengan nilai NULL, seseorang boleh gunakan penyelesaian berikut:
COALESCE(Error,'') not in ('Timeout','Connection Error');
Error IS NULL OR Error not in ('Timeout','Connection Error');
CASE WHEN Error IS NULL THEN 1 ELSE Error not in ('Timeout','Connection Error') THEN 1 END = 1
Pertimbangkan data berikut:
Pertanyaan:
create table tbl(msg varchar(100) null, description varchar(100) not null); insert into tbl values('hi', 'greet'), (null, 'nothing');
Akan kembali hanya 'hai' kerana ungkapan NOT IN dinilai kepada NULL untuk baris dengan nilai NULL msg.
select 'hulk' as x, msg, description from tbl where msg not in ('bruce','banner');
Kesimpulan
Kata kunci IN dalam MYSQL menganggap nilai NULL sebagai kes khas semasa perbandingan. Pembangun yang menggunakan IN mesti menyedari tingkah laku ini dan melaksanakan pengendalian yang sesuai untuk mengelakkan mengecualikan atau menyalahtafsir baris dengan nilai NULL.
Atas ialah kandungan terperinci Bagaimanakah Kata Kunci MYSQL IN Mengendalikan Nilai NULL dalam Perbandingan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!