ホームページ >データベース >mysql チュートリアル >MySQL の「NOT IN」クエリで「COUNT()」を使用すると「オペランドには 1 列が含まれている必要があります」エラーが発生するのはなぜですか?
集計関数を使用した NOT IN
サブクエリでの MySQL「オペランドには 1 列が含まれている必要があります」エラー
MySQL で NOT IN
サブクエリを使用するには、列数に細心の注意を払う必要があります。 「オペランドには 1 列を含める必要があります」という一般的なエラーは、サブクエリが COUNT()
などの集計関数を使用して複数の列を返す場合に発生します。 MySQL の NOT IN
演算子は単一列の比較を想定しています。
根本原因:
このエラーは、メインクエリとサブクエリによって返される列の数の不一致が原因で発生します。 集計関数を含む NOT IN
サブクエリは、複数の列を含む結果セットを生成し、メイン クエリの id
句の単一列 WHERE
と競合します。
例:
次の問題のあるクエリについて考えてみましょう:
<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 < p>The intention is to select campaigns *not* included in the subquery's results. The subquery, however, returns eight columns, causing the "Operand should contain 1 column" error because `NOT IN` expects a single-column comparison against the `id` column in the `campaigns` table.</p><p>**Resolution:**</p><p>The solution involves restructuring the subquery to return only the `id_campaign` column:</p><pre class="brush:php;toolbar:false"><code class="language-sql">SELECT * FROM campaigns WHERE id NOT IN ( SELECT e.id_campaign 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) < </code>
Alternatively, for situations requiring multiple columns, use `EXISTS` or `NOT EXISTS` for a more efficient and accurate solution:
<code class="language-sql">SELECT * FROM campaigns c WHERE NOT EXISTS ( SELECT 1 FROM campaigns d INNER JOIN served e ON d.id = e.id_campaign WHERE d.id = c.id AND d.status = 'Active' AND COUNT(e.id) < </code>
This revised approach avoids the column count mismatch and provides a cleaner solution for scenarios involving aggregate functions within subqueries used with `NOT IN`.
以上がMySQL の「NOT IN」クエリで「COUNT()」を使用すると「オペランドには 1 列が含まれている必要があります」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。