Rumah >pangkalan data >tutorial mysql >Bagaimana Mengendalikan Nilai NULL dalam Kata Kunci IN MySQL untuk Penapisan Tepat?

Bagaimana Mengendalikan Nilai NULL dalam Kata Kunci IN MySQL untuk Penapisan Tepat?

Barbara Streisand
Barbara Streisandasal
2024-10-23 16:09:02439semak imbas

How to Handle NULL Values in MySQL's IN Keyword for Accurate Filtering?

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!

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