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_campaign
、d.name
、d.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
句が単一列の結果セットを受け取るようにして、エラーを解決します。 frequency
と countcap
に基づく元のフィルタリング ロジックは、派生テーブル内に保持されます。
以上がMySQL の NOT IN サブクエリの「オペランドには 1 列が含まれている必要があります」エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。