ホームページ >データベース >mysql チュートリアル >複数の列を含む MySQL の「NOT IN」サブクエリが「オペランドには 1 列を含める必要があります」を返すのはなぜですか?

複数の列を含む MySQL の「NOT IN」サブクエリが「オペランドには 1 列を含める必要があります」を返すのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-12 09:48:43848ブラウズ

Why Does My MySQL `NOT IN` Subquery with Multiple Columns Return

MySQL NOT IN サブクエリ内の複数の列が原因で発生する「操作には 1 つの列が含まれている必要があります」エラー

複数の列を含むサブクエリの NOT IN 句を使用すると、「オペランドには 1 つの列が含まれている必要があります」というエラーがよく発生します。このエラーは、NOT IN 句がサブクエリが単一の列のみを返すことを期待しているという制限によって発生します。

指定されたクエリ内:

<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>

サブクエリは 8 つの列 (id_campaign、name、frequency、country、referral、bid、status、countcap) を返します。ただし、NOT IN 句には比較用に 1 つの列が必要です。

解決策:

このエラーを修正するには、メイン クエリで非メンバーシップを確認する必要がある列である id_campaign 列のみを返すようにサブクエリを変更する必要があります。

<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>
サブクエリの結果を 1 つの列

に制限することで、「オペランドには 1 つの列が含まれている必要があります」というエラーがなくなり、id_campaign 句が比較を正しく実行できるようになります。 クエリをより明確に整理するために、エイリアス NOT IN を追加したことに注意してください。 この変更されたクエリは、subquery がサブクエリ結果に含まれていない campaigns テーブル内の行のみを返します。 id

以上が複数の列を含む MySQL の「NOT IN」サブクエリが「オペランドには 1 列を含める必要があります」を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。