반응형
SELECT 구문에서 사용한 별칭(alias)을 WHERE 조건문에 사용 시 별칭(alias)의 칼럼을 알 수 없다는 오류가 발생합니다.
그 이유는 SQL 질의의 논리적 실행 순서 때문입니다.
SQL 문의 논리적 실행 순서는 다음과 같습니다:
1. FROM: 데이터를 가져올 테이블을 지정합니다.
2. WHERE: 가져올 행(row)을 필터링합니다.
3. GROUP BY: 행을 그룹화합니다.
4. HAVING: 그룹에 대한 조건을 지정합니다.
5. SELECT: 열을 선택합니다.
6. ORDER BY: 결과를 정렬합니다.
7. LIMIT: 결과 행의 수를 제한합니다.
위 순서에 따라 WHERE 절은 SELECT 절보다 먼저 실행되므로, WHERE 절에서 사용하는 별칭은 아직 정의되지 않은 상태입니다. 따라서 WHERE 절에서 별칭을 사용할 수 없습니다. HAVING 절은 실제로 SELECT 절 이후에 실행되며 HAVING 절은 GROUP BY 절 이후에 사용되며, 그룹화된 결과에 대한 조건을 지정하는 데 사용됩니다. 따라서 HAVING 절에서 별칭을 사용할 수 있습니다.
아래는 테스트 테이블과 예제 쿼리입니다.
예제
잘못된 쿼리
select *,
(select city from test_info where id=a.id) as city
from test_user a
where city is not null
[Err] 1054 - Unknown column 'city' in 'where clause'
HAVING 사용하기
select *,
(select city from test_info where id=a.id) as city
from test_user a
HAVING city is not null
반응형
'개발이야기 > MySQL' 카테고리의 다른 글
[MySQL] 문자열 자르기 사용법, 예제 (SUBSTRING, LEFT, RIGHT) (0) | 2023.07.20 |
---|---|
[MySQL] SELECT 결과로 테이블 만들기 (CREATE TABLE AS SELECT) (0) | 2023.07.07 |
[MySQL] EXISTS 사용법, 예제, 활용하기 (조건 만족 검색) (0) | 2023.06.08 |
[MySQL] 테이블 필드 문자열 줄바꿈, 개행문자, 엔터 제거하기 (replace 사용법, 예제) (0) | 2023.05.31 |
[MySQL] 콤마로 구분된 문자열 검색하기 (FIND_IN_SET 사용법, 예제) (1) | 2023.05.25 |
댓글