> 데이터 베이스 > MySQL 튜토리얼 > WHERE 절에서 별칭을 사용할 때 'ORA-00904 잘못된 식별자' 오류를 해결하는 방법은 무엇입니까?

WHERE 절에서 별칭을 사용할 때 'ORA-00904 잘못된 식별자' 오류를 해결하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-19 15:32:10
원래의
413명이 탐색했습니다.

How to Resolve

WHERE 절의 별칭이 잘못된 오류 해결

다음 예와 같이 WHERE 절에 별칭을 사용하는 경우 "ORA-00904 잘못된 식별자" 오류가 발생할 수 있습니다.

SELECT *
FROM table_a A
JOIN table_b B ON A.identifier = B.identifier
WHERE MONTH_NO > UPD_DATE
로그인 후 복사

이 오류는 WHERE 절에서 직접 별칭(예: MONTH_NO 및 UPD_DATE)을 사용할 때 SELECT 목록에서 참조되지 않기 때문에 발생합니다.

오류 이유:

쿼리 실행 중에 WHERE 절은 SELECT 목록보다 먼저 평가됩니다. 따라서 Oracle은 SELECT 목록에 별칭이 정의될 때까지 WHERE 절의 별칭을 인식할 수 없습니다.

해결책:

이 문제를 해결하는 두 가지 주요 방법은 다음과 같습니다.

1. 하위 쿼리 및 필터링:

필요한 계산과 별칭이 포함된 하위 쿼리를 만든 다음 외부 쿼리의 별칭을 기준으로 필터링합니다.

SELECT *
FROM
(
  SELECT A.identifier, A.name,
    TO_NUMBER(DECODE(A.month_no, ...)) AS MONTH_NO,
    TO_NUMBER(TO_CHAR(B.last_update_date, 'YYYYMM')) AS UPD_DATE
  FROM table_a A
  JOIN table_b B ON A.identifier = B.identifier
) AS inner_table
WHERE MONTH_NO > UPD_DATE
로그인 후 복사

2. 공통 테이블 표현식(CTE):

CTE를 정의하여 필요한 계산과 별칭이 포함된 임시 테이블을 만든 다음 외부 쿼리에서 CTE를 참조합니다.

WITH tmp_data AS (
  SELECT A.identifier, A.name,
    TO_NUMBER(DECODE(A.month_no, ...)) AS MONTH_NO,
    TO_NUMBER(TO_CHAR(B.last_update_date, 'YYYYMM')) AS UPD_DATE
  FROM table_a A
  JOIN table_b B ON A.identifier = B.identifier
)
SELECT *
FROM tmp_data
WHERE MONTH_NO > UPD_DATE
로그인 후 복사

성능 노트:

현재 Oracle 버전에는 많은 최적화가 이루어졌습니다. Oracle은 외부 조건을 적용하기 전에 내부 쿼리를 구체화할 것을 요구하지 않습니다. 서버는 비용 효율적인 실행을 위해 조건자를 푸시다운합니다.

위 내용은 WHERE 절에서 별칭을 사용할 때 'ORA-00904 잘못된 식별자' 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿