Rumah >pangkalan data >tutorial mysql >Mengapa `NOT IN` MySQL Gagal dengan Subkueri Kosong?
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.
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.
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!