Klausa NOT IN
SQL dan Nuansa Nilai NULL
Klausa NOT IN
dalam SQL berfungsi untuk mengecualikan baris nilai yang sepadan dalam senarai yang ditentukan. Walau bagaimanapun, kehadiran nilai NULL
dalam senarai ini memperkenalkan kerumitan.
Isu: Keputusan Tidak Dijangka dengan NULL
Pertimbangkan pertanyaan SQL ini:
<code class="language-sql">A: SELECT 'true' WHERE 3 IN (1, 2, 3, NULL); B: SELECT 'true' WHERE 3 NOT IN (1, 2, NULL);</code>
Pertanyaan A menghasilkan hasil, manakala Pertanyaan B tidak. Ini berpunca daripada cara SQL mengendalikan NULL
perbandingan. Pertanyaan A menyemak jika 3 sama dengan mana-mana nilai dalam senarai. Oleh kerana 3 sama dengan 3, ia mengembalikan hasil.
Pertanyaan B, sebaliknya, menyemak sama ada 3 adalah tidak sama dengan setiap nilai. Dengan ANSI_NULLS didayakan (lalai dalam banyak sistem), perbandingan yang melibatkan NULL
menghasilkan UNKNOWN
. UNKNOWN
tidak benar dan tidak palsu; oleh itu, Pertanyaan B tidak mengembalikan baris.
Tetapan ANSI_NULLS dan Pengaruhnya
Melumpuhkan ANSI_NULLS mengubah NULL
gelagat perbandingan. Dengan ANSI_NULLS dimatikan, perbandingan dengan NULL
mengembalikan BENAR jika nilainya tidak sama dan FALSE jika sama. Akibatnya, Pertanyaan B akan mengembalikan hasil dengan ANSI_NULLS dilumpuhkan kerana 3 NOT IN (1, 2, NULL)
akan menilai kepada BENAR.
Memahami Sifat NULL
Adalah penting untuk diingat bahawa NULL
menandakan nilai yang tidak diketahui. Membandingkan NULL
kepada sebarang nilai sentiasa menghasilkan UNKNOWN
kerana kesaksamaan atau ketidaksamaan tidak dapat ditentukan secara muktamad. Apabila menggunakan NOT IN
dengan nilai NULL
, isu yang berpotensi mesti dijangkakan, dan teknik yang sesuai—seperti semakan NULL
eksplisit atau menggunakan COALESCE
untuk menggantikan NULL
dengan nilai yang diketahui—harus dilaksanakan untuk pengendalian pertanyaan yang mantap .
Atas ialah kandungan terperinci Bagaimanakah Nilai NULL Mempengaruhi Keputusan SQL NOT IN Klausa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!