MySQL NOT IN
"Operasi harus mengandungi 1 lajur" ralat yang disebabkan oleh berbilang lajur dalam subquery
Ia adalah perkara biasa untuk menghadapi ralat "operand harus mengandungi 1 lajur" apabila menggunakan klausa NOT IN
subkueri yang mengandungi berbilang lajur. Ralat ini timbul daripada sekatan bahawa klausa NOT IN
menjangkakan subkueri hanya mengembalikan satu lajur.
Dalam pertanyaan yang disediakan:
<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>
Subquery mengembalikan lapan lajur (id_campaign, nama, kekerapan, negara, rujukan, bida, status dan countcap). Walau bagaimanapun, klausa NOT IN
memerlukan satu lajur untuk perbandingan.
Penyelesaian:
Untuk membetulkan ralat ini, kita perlu mengubah suai subkueri supaya ia hanya mengembalikan lajur id_campaign
, iaitu lajur yang kami ingin semak untuk tidak menjadi ahli dalam pertanyaan utama:
<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>
Dengan mengehadkan hasil subkueri kepada satu lajur id_campaign
, kami menghapuskan ralat "operand harus mengandungi 1 lajur" dan memastikan klausa NOT IN
melakukan perbandingan dengan betul. Harap maklum bahawa kami menambahkan alias subquery
untuk mengatur pertanyaan dengan lebih jelas. Pertanyaan yang diubah suai ini hanya akan mengembalikan baris dalam jadual campaigns
dengan id
tiada dalam hasil subkueri.
Atas ialah kandungan terperinci Mengapa Subquery MySQL `NOT IN` Saya dengan Berbilang Lajur Mengembalikan 'Operand Harus Mengandungi 1 Lajur'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!