MySQL NOT IN query gagal: operand harus mengandungi 1 lajur
Apabila anda menemui ralat "operand harus mengandungi 1 lajur" dalam pertanyaan MySQL NOT IN, adalah penting untuk memahami puncanya.
Ralat ini berlaku kerana operan keadaan NOT IN mengandungi berbilang lajur:
<code class="language-sql">SELECT * from campaigns WHERE id not in ( SELECT e.id_campaign, d.name, d.frequency, d.country, d.referral, d.bid, d.status, COUNT(e.id) AS countcap </code>
Pengendali NOT IN memerlukan operannya menjadi satu lajur, manakala subkueri mengembalikan baris yang mengandungi berbilang lajur.
Penyelesaian:
Satu cara untuk menyelesaikan ralat ini ialah dengan mengekstrak lajur yang diperlukan daripada subkueri dan membandingkannya dengan lajur id pertanyaan luar:
<code class="language-sql">select * from campaigns where id not in ( select id_campaign from ( select e.id_campaign as id_campaign, d.frequency, e.id from campaigns d left join served e on d.id = e.id_campaign where d.status = 'Active' group by e.id_campaign having count(e.id) < d.frequency ) as subquery )</code>
Memastikan penggunaan operator id_campaign
yang betul dengan mengehadkan hasil subkueri kepada satu lajur NOT IN
. Selain itu, kami menambah alias as subquery
untuk subquery, yang diperlukan dalam beberapa versi MySQL. Ini meningkatkan kejelasan pertanyaan dan kebolehbacaan.
Atas ialah kandungan terperinci MySQL TIDAK DALAM Ralat: Mengapa 'Operand Harus Mengandungi 1 Lajur'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!