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 つの列が含まれている必要があります」というエラーがなくなり、id_campaign
句が比較を正しく実行できるようになります。 クエリをより明確に整理するために、エイリアス NOT IN
を追加したことに注意してください。 この変更されたクエリは、subquery
がサブクエリ結果に含まれていない campaigns
テーブル内の行のみを返します。 id
以上が複数の列を含む MySQL の「NOT IN」サブクエリが「オペランドには 1 列を含める必要があります」を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。