Pengendali MySQL IN dan Nilai Null
Dalam MySQL, operator IN digunakan untuk menyemak sama ada nilai yang diberikan sepadan dengan sebarang nilai dalam sesuatu yang ditentukan senarai. Walau bagaimanapun, apabila menggunakan operator IN dengan nilai nol, tingkah laku yang tidak dijangka mungkin berlaku.
Mengapa Nilai NULL Dikecualikan
Operator MySQL IN mengembalikan hasil boolean (TRUE atau SALAH). Apabila membandingkan nilai bukan nol kepada null, hasilnya sentiasa FALSE. Akibatnya, apabila menggunakan IN untuk menyemak sama ada nilai tidak sama dengan mana-mana nilai dalam senarai yang termasuk null, semua baris dengan nilai null dikecualikan daripada hasilnya.
Membetulkan Isu
Untuk memasukkan nilai nol dalam hasil, pilihan berikut boleh digunakan:
Error = 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
SELECT t1.* FROM Table1 t1 LEFT JOIN ( SELECT Error FROM ErrorTable WHERE Error IN ('Timeout') ) t2 ON t1.Error = t2.Error;
Kesimpulan
Apabila menggunakan operator IN dengan nilai nol, adalah penting untuk memahami bahawa pengendali menganggap null sebagai nilai istimewa. Untuk memasukkan nilai nol dalam hasil, syarat atau teknik tambahan, seperti yang dinyatakan di atas, mesti digunakan.
Atas ialah kandungan terperinci MySQL IN Operator dan Nilai Null: Mengapa Baris dengan Ralat Null Dikecualikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!