>데이터 베이스 >MySQL 튜토리얼 >SQL의 HAVING 절에서 별칭을 사용할 수 없는 이유는 무엇입니까?

SQL의 HAVING 절에서 별칭을 사용할 수 없는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-18 15:30:151000검색

Why Can't I Use Aliases in SQL's HAVING Clause?

HAVING 절에서 별칭 사용의 한계 이해

SQL에서는 HAVING 절 내 집계에 별칭을 활용하는 것이 직관적으로 보일 수 있습니다. 그러나 이 접근 방식을 사용하면 SQL 쿼리의 특정 평가 순서로 인해 "잘못된 열 이름" 오류가 발생합니다.

이 제한 사항을 이해하려면 SQL이 쿼리를 실행하는 방식을 이해하는 것이 중요합니다.

  1. 먼저 FROM 절에 지정된 조인된 테이블의 모든 행을 결합하여 결과 집합을 생성합니다.
  2. WHERE 절은 다음과 같은 행을 필터링합니다. 기준을 충족하지 않습니다.
  3. 그런 다음 GROUP BY 절에 지정된 열을 기준으로 행을 그룹화합니다.
  4. 중요하게 HAVING 절은 SELECT 문보다 먼저 평가됩니다. 이는 SQL이 현재 SELECT 절에 정의된 별칭을 아직 인식하지 못한다는 것을 의미합니다.
  5. HAVING 절을 평가한 후에만 인식합니다. SQL은 SELECT 목록의 표현식을 평가합니다.

따라서 HAVING 절이 SELECT 절보다 먼저 평가되므로 SELECT 문의 집계에 할당된 별칭(예: "col7") )은 HAVING 표현식을 평가할 때 SQL에 아직 알려지지 않았습니다. 결과적으로 "잘못된 열 이름 'col7'" 오류가 발생합니다.

반대로 ORDER BY 절은 SELECT 문 다음에 평가되므로 SELECT 절에 정의된 별칭을 사용할 수 있습니다. 이는 ORDER BY 절이 SELECT 문으로 생성된 결과 집합에 대해 작동하기 때문입니다.

이 문제를 해결하려면 아래와 같이 HAVING 절의 별칭을 실제 집계 표현식으로 바꾸세요.

select col1,count(col2)
from --some join operation
group by col1
having count(col2) >= 3

위 내용은 SQL의 HAVING 절에서 별칭을 사용할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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