집 >데이터 베이스 >MySQL 튜토리얼 >내 SQL 하위 쿼리가 '하위 쿼리가 EXISTS로 도입되지 않은 경우 선택 목록에 하나의 표현식만 지정할 수 있습니까?'를 반환하는 이유는 무엇입니까?
SQL 하위 쿼리 오류: SELECT 목록의 단일 표현식
이 SQL 쿼리는 오류를 생성합니다:
<code class="language-sql">select count(distinct dNum) from myDB.dbo.AQ where A_ID in (SELECT DISTINCT TOP (0.1) PERCENT A_ID, COUNT(DISTINCT dNum) AS ud FROM myDB.dbo.AQ WHERE M > 1 and B = 0 GROUP BY A_ID ORDER BY ud DESC)</code>
"EXISTS로 하위 쿼리가 도입되지 않은 경우 선택 목록에 하나의 표현식만 지정할 수 있습니다."라는 오류 메시지는 하위 쿼리의 SELECT
절에 문제가 있음을 나타냅니다. 하위 쿼리는 A_ID
및 COUNT(DISTINCT dNum)
라는 두 개의 열을 반환하려고 시도합니다. IN
(또는 =
, !=
등과 같은 다른 비교 연산자)을 사용할 때 하위 쿼리의 SELECT
목록에는 단일 열만 포함되어야 합니다.
해결책:
수정된 쿼리는 하위 쿼리에서 A_ID
만 반환해야 합니다.
<code class="language-sql">select count(distinct dNum) from myDB.dbo.AQ where A_ID in (SELECT DISTINCT TOP (0.1) PERCENT A_ID FROM myDB.dbo.AQ WHERE M > 1 and B = 0 GROUP BY A_ID) ORDER BY COUNT(DISTINCT dNum) DESC;</code>
변경 사항 확인:
SELECT
절에는 이제 A_ID
만 포함됩니다.ORDER BY
절이 외부 쿼리로 이동되었습니다. 이는 원래 ORDER BY
가 IN
절에 사용되기 전에 하위 쿼리 결과를 정렬하려고 시도했기 때문입니다. 정렬은 최종 결과 세트에 적용되어야 합니다.이 수정된 쿼리는 하위 쿼리 결과에서 dNum
가 발견된 고유 A_ID
값의 개수를 올바르게 선택합니다. 하위 쿼리는 고유 A_ID
개수를 기준으로 dNum
값의 상위 10%를 효율적으로 식별하고, 외부 쿼리는 선택한 dNum
과 연결된 고유 A_ID
값을 계산합니다. 마지막 ORDER BY
절은 고유한 dNum
값의 개수를 기준으로 결과를 정렬합니다.
위 내용은 내 SQL 하위 쿼리가 '하위 쿼리가 EXISTS로 도입되지 않은 경우 선택 목록에 하나의 표현식만 지정할 수 있습니까?'를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!