Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Membetulkan Ralat 'Operand Should Contain 1 Column' dalam MySQL NOT IN Subquery?
MySQL "Operand Should Contain 1 Column" Ralat dalam NOT IN Subqueries: A Solution
KlausaMySQL NOT IN
memerlukan subquery untuk mengembalikan satu lajur. Pertanyaan berikut menjana ralat "Operand harus mengandungi 1 lajur" kerana subkueri mengembalikan 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 FROM campaigns d LEFT JOIN served e ON d.id = e.id_campaign WHERE d.status = 'Active' GROUP BY e.id_campaign HAVING countcap < d.frequency)</code>
Masalahnya terletak pada memilih berbilang medan (cth., e.id_campaign
, d.name
, d.frequency
, dsb.) dalam subkueri. NOT IN
menjangkakan satu lajur untuk perbandingan.
Penyelesaian: Menggunakan Jadual Terbitan
Untuk membetulkan ini, kita boleh menggunakan jadual terbitan (subkueri dalam klausa FROM
) untuk mengasingkan lajur yang berkaitan:
<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>
Pertanyaan yang disemak ini menggunakan jadual terbitan bernama subquery
. Pertanyaan dalaman ini melaksanakan logik asal, tetapi hanya memilih e.id_campaign
(disebut sebagai id_campaign
), memastikan klausa NOT IN
luar menerima set hasil lajur tunggal, sekali gus menyelesaikan ralat. Logik penapisan asal berdasarkan frequency
dan countcap
dikekalkan dalam jadual terbitan.
Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat 'Operand Should Contain 1 Column' dalam MySQL NOT IN Subquery?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!