Rumah >pangkalan data >tutorial mysql >MySQL IN Operator dan Nilai Null: Mengapa Baris dengan Ralat Null Dikecualikan?

MySQL IN Operator dan Nilai Null: Mengapa Baris dengan Ralat Null Dikecualikan?

Patricia Arquette
Patricia Arquetteasal
2024-10-23 17:43:02802semak imbas

MySQL IN Operator and Null Values: Why Are Rows with Null Errors Excluded?

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:

  1. Fungsi COALESCE: Fungsi COALESCE boleh menggantikan nilai nol dengan nilai lalai yang ditentukan . Menggunakan fungsi ini, pertanyaan boleh diubah suai kepada:
Error = COALESCE(Error, '') NOT IN ('Timeout','Connection Error');
  1. ATAU Operator: Operator OR boleh digunakan untuk menyemak kedua-dua kehadiran tertentu kod ralat dan ketiadaan nilai ralat nol. Oleh itu, pertanyaan boleh ditulis semula sebagai:
Error IS NULL OR Error NOT IN ('Timeout','Connection Error');
  1. Kenyataan KES: Pernyataan CASE boleh digunakan untuk menilai berbilang syarat dan mengembalikan nilai tertentu berdasarkan hasilnya. Dalam kes ini, ia boleh digunakan untuk mencipta ungkapan boolean yang mengembalikan TRUE untuk baris dengan ralat bukan nol. Pertanyaan boleh diubah suai kepada:
CASE WHEN Error IS NULL THEN 1
ELSE Error NOT IN ('Timeout','Connection Error') THEN 1
END = 1
  1. SERTAI Subquery: SERTAI subquery boleh digunakan untuk mendapatkan semula data daripada berbilang jadual dan menggabungkan keputusan berdasarkan keadaan biasa. Kaedah ini boleh memastikan bahawa baris dengan ralat nol tidak dikecualikan:
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!

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