Rumah >pangkalan data >tutorial mysql >Bagaimana Mengendalikan Nilai NULL dalam Kata Kunci IN MySQL untuk Penapisan Tepat?
Memahami NULL Handling dalam MySQL's IN Keyword
MySQL's IN keyword mengembalikan hasil boolean, tetapi penting untuk ambil perhatian bahawa ia tidak selalunya kembalikan 1 (benar) atau 0 (salah). Kes khas NULL boleh memperkenalkan gelagat yang tidak dijangka, terutamanya apabila menapis data.
Kes NULL dalam IN
Pertanyaan berikut mengecualikan baris dengan sama ada lajur Ralat 'Tamat masa' atau 'Ralat Sambungan':
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and Error not in ('Timeout','Connection Error')
Walau bagaimanapun, pertanyaan ini tidak termasuk baris dengan Ralat adalah NULL. Ini kerana pengendali IN menilai kepada NULL apabila membandingkan nilai kepada NULL. Akibatnya, ungkapan "Ralat tidak dalam ('Tamat masa','Ralat Sambungan')" adalah palsu untuk baris dengan nilai NULL.
Penyelesaian untuk Pengendalian NULL
Untuk mendapatkan semula hasil yang betul apabila berurusan dengan nilai NULL, terdapat beberapa pendekatan:
1. Gunakan COALESCE() untuk Lalai kepada Rentetan Kosong
COALESCE(Error,'') not in ('Timeout','Connection Error')
2. Gunakan ATAU untuk Menguji NULL dan Ketaksamaan Nilai
Error IS NULL OR Error not in ('Timeout','Connection Error')
3. Gunakan CASE untuk Meniru Penilaian Boolean
CASE WHEN Error IS NULL THEN 1 ELSE Error not in ('Timeout','Connection Error') THEN 1 END = 1
Sensitiviti dan Prestasi Kes
ATAU tidak litar pintas, bermakna ia akan menilai kedua-dua ungkapan walaupun jika yang pertama adalah palsu. CASE, sebaliknya, boleh menghentikan penilaian jika syarat pertama dipenuhi. Ini membawa kepada prestasi yang lebih baik apabila terdapat banyak nilai NULL yang berpotensi.
Contoh Perbandingan Null
Untuk menggambarkan kelakuan NULL dalam ungkapan IN, pertimbangkan jadual berikut:
msg | description |
---|---|
hi | greet |
NULL | nothing |
Ungkapan:
select 'hulk' as x, msg, description from tbl where msg not in ('bruce','banner')
hanya akan mengembalikan baris dengan 'hai'. Ini kerana msg adalah NULL untuk baris yang lain, yang menghasilkan perbandingan yang tidak dapat ditentukan.
Kesimpulannya, kata kunci IN MySQL mungkin mengembalikan NULL apabila membandingkan dengan nilai NULL, yang membawa kepada hasil yang tidak dijangka dalam penapisan. Untuk menangani perkara ini, gunakan salah satu penyelesaian yang dibincangkan di atas untuk memastikan pengambilan data yang tepat.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Nilai NULL dalam Kata Kunci IN MySQL untuk Penapisan Tepat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!