>데이터 베이스 >MySQL 튜토리얼 >MySQL `NOT IN` 쿼리에서 `COUNT()`를 사용하면 '피연산자는 1개 열을 포함해야 합니다' 오류가 발생하는 이유는 무엇입니까?

MySQL `NOT IN` 쿼리에서 `COUNT()`를 사용하면 '피연산자는 1개 열을 포함해야 합니다' 오류가 발생하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-12 06:43:44489검색

Why Does My MySQL `NOT IN` Query with `COUNT()` Result in an

NOT IN 집계 함수가 포함된 하위 쿼리

에서 MySQL "피연산자는 1개의 열을 포함해야 합니다." 오류

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.