Apabila bekerja dengan pertanyaan MySQL, adalah perkara biasa untuk menghadapi situasi di mana anda perlu mengecualikan nilai tertentu daripada set hasil menggunakan pengendali "TIDAK MASUK". Untuk mencapai matlamat ini, anda boleh menetapkan pembolehubah untuk menyimpan senarai nilai yang dikecualikan. Walau bagaimanapun, mentakrifkan pembolehubah dalam format yang betul adalah penting untuk memastikan pertanyaan dilaksanakan dengan jayanya.
Pertimbangkan pertanyaan berikut:
SET @idcamposexcluidos='817,803,495'; WHERE id_campo not in (@idcamposexcluidos)
Pertanyaan di atas cuba menetapkan pembolehubah yang dipanggil @idcamposexcluidos kepada senarai nilai dan kemudian gunakan pembolehubah dalam klausa "TIDAK DALAM". Walau bagaimanapun, ia mungkin mengakibatkan ralat atau hasil yang salah jika pembolehubah tidak ditakrifkan dalam format yang sesuai.
Pengendali "TIDAK MASUK" memerlukan senarai nilai berasingan dalam kurungan, manakala pembolehubah @idcamposexcluidos mengandungi koma -tali yang dipisahkan. Ketidakpadanan ini membawa kepada penyusunan dan pelaksanaan pertanyaan yang salah.
Untuk menyelesaikan isu ini, terdapat dua pendekatan utama:
1. SQL Dinamik:
SQL Dinamik membolehkan anda membina rentetan pertanyaan secara dinamik pada masa jalan, termasuk senarai nilai yang dikecualikan. Pendekatan ini memastikan bahawa pertanyaan diformat dan dilaksanakan dengan betul.
SET @sql = CONCAT('WHERE id_campo not in (', @idcamposexcluidos, ')'); PREPARE stmt FROM @sql; EXECUTE stmt;
2. Fungsi FIND_IN_SET:
MySQL menyediakan fungsi yang dipanggil FIND_IN_SET yang boleh digunakan untuk menyemak sama ada nilai wujud dalam rentetan yang dipisahkan koma. Dengan menggunakan fungsi ini, anda boleh mengelakkan keperluan untuk menukar pembolehubah kepada senarai yang betul.
SET @idcamposexcluidos='817,803,495'; WHERE FIND_IN_SET(id_campo, @idcamposexcluidos) = 0
Walaupun fungsi FIND_IN_SET ialah cara yang mudah untuk mengendalikan senario ini, adalah penting untuk ambil perhatian bahawa ia tidak boleh menggunakan indeks semasa melakukan pemeriksaan. Ini boleh mengakibatkan prestasi berkurangan untuk set data yang besar.
Atas ialah kandungan terperinci Bagaimana Menggunakan Pembolehubah dengan Betul dengan Operator 'NOT IN' MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!