ホームページ > データベース > mysql チュートリアル > MySQL の NOT IN サブクエリの「オペランドには 1 列が含まれている必要があります」エラーを修正する方法

MySQL の NOT IN サブクエリの「オペランドには 1 列が含まれている必要があります」エラーを修正する方法

Barbara Streisand
リリース: 2025-01-12 07:13:46
オリジナル
467 人が閲覧しました

How to Fix the

NOT IN サブクエリにおける MySQL の「オペランドには 1 列が含まれている必要があります」エラー: 解決策

MySQL の NOT IN 句では、サブクエリが単一の列を返す必要があります。 次のクエリでは、サブクエリが複数の列を返すため、「オペランドには 1 列を含める必要があります」エラーが生成されます。

<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>
ログイン後にコピー

問題は、サブクエリ内で複数のフィールド (例: e.id_campaignd.named.frequency など) を選択することにあります。 NOT IN では、比較用に 1 つの列が必要です。

解決策: 派生テーブルの使用

これを修正するには、派生テーブル (FROM 句のサブクエリ) を使用して、関連する列を分離します。

<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>
ログイン後にコピー

この改訂されたクエリでは、subquery という名前の派生テーブルが使用されます。この内部クエリは元のロジックを実行しますが、e.id_campaign (id_campaign というエイリアス) のみを選択し、外部の NOT IN 句が単一列の結果セットを受け取るようにして、エラーを解決します。 frequencycountcap に基づく元のフィルタリング ロジックは、派生テーブル内に保持されます。

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

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