Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Membetulkan Ralat 'Operand Should Contain 1 Column' dalam MySQL NOT IN Subquery?

Bagaimana untuk Membetulkan Ralat 'Operand Should Contain 1 Column' dalam MySQL NOT IN Subquery?

Barbara Streisand
Lepaskan: 2025-01-12 07:13:46
asal
467 orang telah melayarinya

How to Fix the

MySQL "Operand Should Contain 1 Column" Ralat dalam NOT IN Subqueries: A Solution

Klausa

MySQL 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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan