집 >데이터 베이스 >MySQL 튜토리얼 >MySQL `NOT IN` 쿼리에서 `COUNT()`를 사용하면 '피연산자는 1개 열을 포함해야 합니다' 오류가 발생하는 이유는 무엇입니까?
NOT IN
집계 함수가 포함된 하위 쿼리
MySQL에서 NOT IN
하위 쿼리를 사용하려면 열 개수에 세심한 주의가 필요합니다. 하위 쿼리가 COUNT()
와 같은 집계 함수를 사용하여 여러 열을 반환하는 경우 일반적인 오류인 "피연산자는 1개의 열을 포함해야 합니다."가 발생합니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!