Bagaimanakah MySQL Mengendalikan Nilai NULL dalam Ungkapan IN?

Barbara Streisand
Lepaskan: 2024-10-23 18:17:05
asal
300 orang telah melayarinya

How Does MySQL Handle NULL Values in IN Expressions?

MySQL IN Kata Kunci dan Nilai NULL

Kata kunci IN dalam MySQL melakukan perbandingan antara ungkapan yang diberikan dan senarai nilai, mengembalikan hasil boolean (BENAR/SALAH). Walau bagaimanapun, dalam senario tertentu, MySQL mengendalikan nilai NULL dengan cara yang berbeza.

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

Pertanyaan ini bertujuan untuk mendapatkan semula baris daripada Jadual1 yang mempunyai nilai CurrentDateTime lebih besar daripada '2012-05-28 15:34:02.403504' dan nilai Ralat yang tidak sama dengan 'Tamat Masa' atau 'Ralat Sambungan'. Yang menghairankan, pertanyaan ini mengecualikan baris dengan nilai NULL untuk Ralat.

Mengapa MySQL Mengabaikan Nilai NULL dalam Ungkapan IN?

MySQL menganggap NULL sebagai nilai yang tidak diketahui atau tidak ditentukan. Apabila digunakan dalam ungkapan IN, MySQL menilai NULL sebagai tidak BENAR atau SALAH, menghasilkan keputusan yang tidak diketahui. Oleh itu, ungkapan IN menilai kepada NULL sendiri.

Membetulkan Pertanyaan

Untuk mendapatkan semula baris dengan nilai Ralat NULL juga, terdapat beberapa pendekatan:

  1. Gunakan COALESCE untuk menggantikan nilai NULL dengan nilai lalai:
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and COALESCE(Error,'') not in ('Timeout','Connection Error');
Salin selepas log masuk
  1. Gunakan IS NULL dan OR untuk menyemak nilai NULL secara eksplisit:
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and (Error IS NULL OR Error not in ('Timeout','Connection Error'));
Salin selepas log masuk
  1. Gunakan CASE untuk menetapkan hasil boolean berdasarkan nilai Ralat:
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and CASE WHEN Error IS NULL THEN 1 ELSE Error not in ('Timeout','Connection Error') THEN 1 ELSE 0 END = 1;
Salin selepas log masuk

Pengubahsuaian ini memastikan bahawa baris dengan nilai Ralat NULL disertakan dalam hasil pertanyaan.

Atas ialah kandungan terperinci Bagaimanakah MySQL Mengendalikan Nilai NULL dalam Ungkapan IN?. 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!