MySQL WHERE 절 하위 쿼리: 열 별칭 문제 및 해결 방법
MySQL WHERE
절 하위 쿼리 내에서 열 별칭을 사용하면 "#1054 - 'IN/ALL/ANY 하위 쿼리'의 알 수 없는 열 'guaranteed_postcode'"와 같은 오류가 발생하는 경우가 많습니다. 이는 쿼리에 의해 실제로 정의되기 전에 별칭(이 경우 guaranteed_postcode
)을 기반으로 결과를 필터링하려고 시도할 때 발생합니다.
문제 시나리오:
일반적인 시나리오에는 쿼리 조인 테이블(예: '사용자' 및 '위치')과 새 열 생성(예: '원시' 열의 하위 문자열에서 guaranteed_postcode
)이 포함됩니다. WHERE
절 하위 쿼리에서 새로 생성된 별칭을 사용하여 필터링하려는 후속 시도는 실패합니다.
실패하는 이유:
MySQL은 별칭을 확인하기 전에 WHERE
절을 처리합니다. 따라서 guaranteed_postcode
절 실행 시점에서는 WHERE
별칭을 알 수 없습니다. 이 제한은 SQL 표준과 일치합니다.
SQL 표준 준수:
SQL 표준을 준수하는 MySQL은 WHERE
절 내에서 열 별칭 사용을 제한합니다. 별칭은 GROUP BY
, ORDER BY
, HAVING
절에서 올바르게 사용됩니다.
HAVING을 사용한 효과적인 솔루션:
권장되는 해결책은 HAVING
절을 활용하는 것입니다. HAVING
은 집계된 데이터를 필터링하도록 설계되었지만 이러한 상황을 효과적으로 처리할 수 있습니다. 쿼리를 다시 작성하는 방법은 다음과 같습니다.
<code class="language-sql">HAVING `guaranteed_postcode` NOT IN ( SELECT `postcode` FROM `postcodes` WHERE `region` IN ('australia') )</code>
이 접근 방식을 사용하면 열이 생성된 guaranteed_postcode
후 별칭 이 평가되어 오류가 해결됩니다. HAVING
절은 원하는 조건에 따라 결과를 올바르게 필터링합니다.
위 내용은 MySQL WHERE 절 하위 쿼리에서 열 별칭을 사용할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!