Bagaimanakah Kata Kunci MYSQL IN Mengendalikan Nilai NULL dalam Perbandingan?

Linda Hamilton
Lepaskan: 2024-10-23 21:43:30
asal
308 orang telah melayarinya

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');
Salin selepas log masuk

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'
Salin selepas log masuk

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');
    Salin selepas log masuk
  • ATAU Keadaan dengan IS NULL :
  • Error IS NULL OR Error not in ('Timeout','Connection Error');
    Salin selepas log masuk
  • Ekspresi KES dengan Litar Pintas:
  • CASE WHEN Error IS NULL THEN 1
     ELSE Error not in ('Timeout','Connection Error') THEN 1
     END = 1
    Salin selepas log masuk
  • 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');
Salin selepas log masuk

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');
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!