ホームページ > データベース > mysql チュートリアル > MySQL の「NOT IN」クエリで「COUNT()」を使用すると「オペランドには 1 列が含まれている必要があります」エラーが発生するのはなぜですか?

MySQL の「NOT IN」クエリで「COUNT()」を使用すると「オペランドには 1 列が含まれている必要があります」エラーが発生するのはなぜですか?

Susan Sarandon
リリース: 2025-01-12 06:43:44
オリジナル
495 人が閲覧しました

Why Does My MySQL `NOT IN` Query with `COUNT()` Result in an

集計関数を使用した 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート