Rumah >pangkalan data >tutorial mysql >Mengapa `NOT IN` MySQL Gagal dengan Subkueri Kosong?

Mengapa `NOT IN` MySQL Gagal dengan Subkueri Kosong?

Linda Hamilton
Linda Hamiltonasal
2024-12-29 15:48:12736semak imbas

Why Does MySQL's `NOT IN` Fail with Empty Subqueries?

MySQL "NOT IN" Query on Three Tables

Dalam pertanyaan anda, anda telah memasukkan syarat Gred.ID_Courses NOT IN ( SELECT ID_Courses FROM Evaluation WHERE NAME='JOHN' and Year=1) untuk ditapis baris daripada jadual Gred yang tidak wujud dalam jadual Penilaian dengan nilai NAMA dan Tahun yang sama. Walau bagaimanapun, apabila nama "JOHN" tidak terdapat dalam jadual Penilaian, pertanyaan tidak menghasilkan output.

Mengapa NOT IN Boleh Menyusahkan

Satu had penggunaan NOT IN dengan subkueri adalah kerentanannya terhadap ketidakkonsistenan apabila salah satu subkueri mengandungi nilai NULL. Ini kerana SQL menggunakan logik tiga nilai, di mana NULL mewakili nilai yang tidak diketahui atau hilang. Apabila NOT IN digunakan pada subkueri yang mungkin mengandungi nilai NULL, hasilnya boleh menjadi tidak dapat diramalkan atau tidak betul.

Alternatif kepada NOT IN

Untuk mengurangkan isu ini , adalah disyorkan untuk mengelak daripada menggunakan NOT IN dengan subqueries yang mungkin mengandungi nilai NULL. Sebaliknya, alternatif yang lebih dipercayai seperti NOT EXISTS atau cantuman eksplisit boleh digunakan.

Sebagai contoh, anda boleh menulis semula pertanyaan anda menggunakan operator NOT EXISTS seperti berikut:

SELECT Grade.ID_Courses,
       Course.ID_Courses,
       Grade.NAME,
       Course.NAME,
       Grade.ID_Courses,
       Evaluation.NAME,
       Evaluation.Year,
       Grade.Year
FROM Grade
JOIN Course ON Grade.ID_Courses = Course.ID_Courses
LEFT JOIN Evaluation ON Grade.NAME = Evaluation.NAME and Grade.Year = Evaluation.Year
WHERE Grade.NAME = 'JOHN'
  AND Grade.Year = 1
  AND Evaluation.NAME IS NULL;

Menggunakan cantuman eksplisit bukannya klausa WHERE, seperti yang dicadangkan dalam penyelesaian yang disediakan, juga boleh meningkatkan prestasi dan kebolehbacaan pertanyaan anda.

Atas ialah kandungan terperinci Mengapa `NOT IN` MySQL Gagal dengan Subkueri Kosong?. 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