Rumah >pangkalan data >tutorial mysql >Mengapa `NULL != NULL` Tidak Sentiasa Kembali Benar dalam SQL?
Mengapa Ketaksamaan dengan NULL Tidak Sentiasa Kembali Benar
Apabila membandingkan nilai NULL dengan pengendali ketaksamaan ("!="), ia adalah sering mengandaikan bahawa hasilnya harus benar, kerana NULL tidak sama dengan dirinya sendiri. Walau bagaimanapun, dalam konteks tertentu seperti SQL, andaian ini tidak sah.
SQL's Ternary Logic
Dalam SQL, NULL mewakili nilai yang tidak diketahui. Ini memperkenalkan keadaan logik ketiga di luar benar dan palsu, yang dikenali sebagai "tidak diketahui." Akibatnya, perbandingan ketidaksamaan dengan NULL mengikut logik ternary, di mana hasilnya boleh menjadi salah satu daripada tiga pilihan:
Contoh:
Pertimbangkan pernyataan berikut:
WHERE (A <> B)
Jika A dan B adalah kedua-duanya NULL, ungkapan di atas mengembalikan "tidak diketahui" kerana tiada cara untuk menentukan sama ada ia benar-benar tidak sama atau sama ada kedua-duanya tidak diketahui.
Implikasi untuk Pemeriksaan Ketaksamaan
Ini logik ternary menentukan bahawa semakan ketidaksamaan mudah dengan NULL mungkin tidak selalu kembali benar. Untuk memastikan hasil yang tepat, semak secara eksplisit keadaan NULL menggunakan "IS NULL" dan "IS NOT NULL" adalah perlu.
Sebagai contoh, ungkapan berikut mengendalikan perbandingan ketaksamaan dengan NULL dengan betul:
WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))
Dengan memasukkan semakan eksplisit ini, pangkalan data boleh menentukan hasil logik yang betul (benar, salah atau tidak diketahui) untuk semua kemungkinan kes melibatkan nilai NULL.
Atas ialah kandungan terperinci Mengapa `NULL != NULL` Tidak Sentiasa Kembali Benar dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!