반응형

[오라클 Oracle] ORA-00918 : column ambiguously defined 에러 확인하기


이 에러는 쿼리에서 두개 이상의 테이블을 조인 할때, 컬럼명이 같은 경우가 있습니다. 

대부분 조인을 하기 위한 컬럼의 이름이 같은 경우가 더 많습니다. 

같은 컬럼명의 데이터를 select 할 경우 어느쪽 테이블에 있는 컬럼인지 지정을 하지 않았을때 주로 나타나는 에러 입니다. 


예를 들어 보겠습니다. 

두개의 테이블이 있습니다. 

A 테이블은 두개의 컬럼이 있습니다. 

사원번호, 이름 두개의 컬럼으로 구성되어 있습니다.

[A 테이블]

 사원번호

 이름


B 테이블 역시 두개의 컬럼으로 구성되어 있습니다. 

컬럼명은 사원번호, 직급

[B 테이블]

 사원번호

 직급


이 두개의 테이블을 조인 하여 데이터를 구할 경우 다음과 같은 간단한 쿼리를 사용합니다.

SELECT 이름

FROM A

INNER JOIN B on A.사원번호 = B.사원번호


위 쿼리는 두개의 테이블을 이용해 이름을 알수 있는 쿼리를 표시 합니다.

그런데 이때 사원번호와 직급 데이터 까지 같이 보고 싶을 경우

어떻게 될까요?

SELECT 이름, 사원번호, 직급

FROM A

INNER JOIN B on A.사원번호 = B.사원번호


이와 같은 쿼리를 실행하면 바로 위에서 볼수 있는 에러를 확인 할 수 있습니다. 

이럴땐 중복이 되는 사원번호 컬럼를 지정 하지 않으면 어느쪽에 있는 데이터를 가져 와야 할지 오라클은 알지 못해 에러를 냅니다.

그래서 다름과 같이 수정을 하면 정상으로 작동이 됩니다. 

SELECT a.이름, b.사원번호, b.직급

FROM A a

INNER JOIN B b on A.사원번호 = B.사원번호


테이블 이름을 a와 b로 선언 하고 해당 테이블 명의 데이터를 호출 하는 것입니다. 

사원번호는 B테이블의 데이터를 가져오게 명시를 했기 때문에 에러가 나지 않습니다. 


사람처럼 알아서 처리 되면 좋겠지만 컴퓨터는 해당 부분은을 제대로 명시 하지 않으면 에러가 발생합니다. 

위와 같은 에러를 확인 하게 된다면 데이터를 가져오는데 제대로 된 테이블 명시를 했지 확인 하면 빠르게 오류를 잡을 수 있을 것입니다. 




반응형

+ Recent posts