집 >데이터 베이스 >MySQL 튜토리얼 >내 MySQL `NOT IN` 쿼리에서 '피연산자는 1개 열을 포함해야 합니다' 오류가 발생하는 이유는 무엇입니까?
MySQL NOT IN
쿼리
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!