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

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

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-12 10:00:42744검색

Why Does My MySQL `NOT IN` Query Throw an

MySQL NOT IN 쿼리

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

MySQL 쿼리에서 NOT IN 연산자를 사용할 때 오른쪽 피연산자(하위 쿼리)에 열이 하나만 포함되어 있는지 확인하는 것이 중요합니다. 그러나 경우에 따라 특히 하위 쿼리에서 COUNT()와 같은 집계 함수를 사용할 때 "피연산자에 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>

이 쿼리는 각 활동에 대해 제공되는 항목 수를 계산하는 하위 쿼리에 없는 모든 활동을 선택하고 그 개수가 활동 빈도보다 적은 항목을 필터링하는 것을 목표로 합니다. 그러나 MySQL은 하위 쿼리에 여러 열이 있기 때문에 "피연산자는 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, 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 count(e.id) < d.frequency
    ) AS subquery
);</code>

이 업데이트된 하위 쿼리에서는 id_campaign 열만 투영하여 오류를 해결합니다. 이제 쿼리는 서비스 항목 수가 캠페인 빈도보다 적은 캠페인을 올바르게 제외합니다.

또는 더 명확한 코드를 위해 다음과 같이 다시 작성할 수 있습니다.

<code class="language-sql">SELECT c.*
FROM campaigns c
WHERE c.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) < d.frequency
);</code>

이 버전에서는 NOT IN 절에서 직접 id_campaign을 선택하여 중첩된 하위 쿼리를 피하고 코드를 더욱 간결하고 읽기 쉽게 만듭니다. 중요한 점은 NOT IN 절 오른쪽에 있는 하위 쿼리가 단일 데이터 열만 반환해야 한다는 것입니다.

위 내용은 내 MySQL `NOT IN` 쿼리에서 '피연산자는 1개 열을 포함해야 합니다' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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