Rumah >pangkalan data >tutorial mysql >Mengapa Pertanyaan MySQL 'TIDAK MASUK' Gagal, dan Bagaimana Saya Boleh Membetulkannya?
Menyelesaikan masalah MySQL "TIDAK DALAM" Ralat Pertanyaan
Seorang pengguna baru-baru ini mengalami ralat sintaks semasa mencuba pertanyaan MySQL yang kelihatan mudah. Matlamatnya adalah untuk memilih semua baris daripada Table1
yang nilai lajur principal
tidak terdapat dalam Table2
. Pertanyaan awal yang salah ialah:
<code class="language-sql">SELECT * FROM Table1 WHERE Table1.principal NOT IN Table2.principal</code>
Ini menjana ralat, menyebabkan pengguna percaya bahawa MySQL mungkin tidak menyokong klausa NOT IN
, berdasarkan nasihat dalam talian yang bercanggah. Sesetengah sumber mencadangkan penyelesaian yang rumit.
Walau bagaimanapun, MySQL memang menyokong NOT IN
, tetapi sintaks yang digunakan di atas adalah cacat. Sintaks yang betul memerlukan subkueri:
<code class="language-sql">SELECT * FROM Table1 WHERE Table1.principal NOT IN (SELECT principal FROM Table2)</code>
Pertanyaan yang disemak ini menggunakan subkueri (SELECT principal FROM Table2)
untuk mentakrifkan set nilai principal
secara eksplisit daripada Table2
. MySQL kemudiannya membandingkan setiap nilai Table1.principal
dengan betul dengan set ini, hanya mengembalikan baris yang padanannya tidak ditemui.
Ralat asal berpunca semata-mata daripada aplikasi operator NOT IN
yang salah. Kemasukan subkueri menyediakan struktur yang diperlukan untuk pangkalan data untuk melaksanakan pertanyaan dengan jayanya dan menghasilkan hasil yang diharapkan.
Atas ialah kandungan terperinci Mengapa Pertanyaan MySQL 'TIDAK MASUK' Gagal, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!