Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah Kata Kunci MYSQL IN Mengendalikan Nilai NULL dalam Perbandingan?

Bagaimanakah Kata Kunci MYSQL IN Mengendalikan Nilai NULL dalam Perbandingan?

Linda Hamilton
Linda Hamiltonasal
2024-10-23 21:43:30304semak imbas

How Does MYSQL's IN Keyword Handle NULL Values in Comparisons?

Layanan Kata Kunci MYSQL IN terhadap Nilai NULL

Pertanyaan SQL selalunya menggunakan kata kunci IN untuk menapis hasil berdasarkan set nilai yang ditentukan. Walau bagaimanapun, apabila berurusan dengan nilai NULL, kata kunci IN MYSQL mempamerkan gelagat unik yang memerlukan pertimbangan.

Masalah: IN Kata Kunci Tidak Termasuk Nilai NULL

Pertimbangkan pertanyaan berikut:

select count(*) from Table1 where CurrentDateTime>='2012-05-28 15:34:02.403504' and Error not in ('Timeout','Connection Error');

Sebab Pengecualian NULL

Kata kunci IN membandingkan ungkapan menggunakan nilai boolean ( 1/0). Walau bagaimanapun, dalam beberapa kes, ia boleh mengembalikan NULL dan bukannya nilai boolean. Apabila Ralat adalah NULL, ungkapan IN menjadi:

Peraturan perbandingan nol digunakan di sini. Oleh kerana nilai Ralat adalah NULL, ungkapan tidak boleh menilai sama ada benar atau salah.

Error <> 'Timeout' AND Error <> 'Connection Error'

Penyelesaian untuk Termasuk Nilai NULL

Untuk memasukkan baris dengan nilai NULL, seseorang boleh gunakan penyelesaian berikut:

    COALESCE dengan IN:
  • COALESCE(Error,'') not in ('Timeout','Connection Error');
  • ATAU Keadaan dengan IS NULL :
  • Error IS NULL OR Error not in ('Timeout','Connection Error');
  • Ekspresi KES dengan Litar Pintas:
  • CASE WHEN Error IS NULL THEN 1
     ELSE Error not in ('Timeout','Connection Error') THEN 1
     END = 1
  • Contoh

Pertimbangkan data berikut:

Pertanyaan:

create table tbl(msg varchar(100) null, description varchar(100) not null);
insert into tbl values('hi', 'greet'), (null, 'nothing');

Akan kembali hanya 'hai' kerana ungkapan NOT IN dinilai kepada NULL untuk baris dengan nilai NULL msg.

select 'hulk' as x, msg, description
from tbl where msg not in ('bruce','banner');

Kesimpulan

Kata kunci IN dalam MYSQL menganggap nilai NULL sebagai kes khas semasa perbandingan. Pembangun yang menggunakan IN mesti menyedari tingkah laku ini dan melaksanakan pengendalian yang sesuai untuk mengelakkan mengecualikan atau menyalahtafsir baris dengan nilai NULL.

Atas ialah kandungan terperinci Bagaimanakah Kata Kunci MYSQL IN Mengendalikan Nilai NULL dalam Perbandingan?. 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