>데이터 베이스 >MySQL 튜토리얼 >MySQL WHERE 절 하위 쿼리에서 열 별칭을 사용할 수 없는 이유는 무엇입니까?

MySQL WHERE 절 하위 쿼리에서 열 별칭을 사용할 수 없는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-22 08:12:11413검색

Why Can't I Use a Column Alias in a MySQL WHERE Clause Subquery?

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

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