본문으로 바로가기

  

 

이번 글에서는 ORA-00918: 열의 정의가 애매합니다 에러에 대하여 알아보도록 하겠습니다.

 

ORA-00918: 열의 정의가 애매합니다
ORA-00918: "column ambiguously defined"

 

쿼리를 작성하다가 이런 에러가 발생하신 경험이 있으실 겁니다.

예제를 통하여 에러가 발생하는 이유와 해결방법에 대하여 알아보겠습니다.

 

 

아래 쿼리는 emp 테이블과 dept 테이블을 조인하여 사원명(ename), 부서명(dname), 부서 번호(deptno)를 조회하는 예제입니다.

SELECT ename, dname, deptno
FROM emp, dept
WHERE emp.deptno = dept.deptno
AND ename = 'SCOTT';

 

위의 쿼리를 실행하니 바로 ORA-00918: "column ambiguously defined" 에러가 발생하였습니다.

 

그 이유는 무엇일까요?

흔히 ORA-00918 에러는 조인에서 발생하는데  발생 이유는 너무 간단합니다.

 

 

조인 조건절에서 우리는 공통 컬럼을 작성할 때 아래와 같이 작성합니다.

ON EMP.deptno = DEPT.deptno

AND EMP.x = DEPT.x 

 

 

첫 행에서 컬럼에 대해 구체적으로 표기를 안 해서 나타난 에러입니다.

즉 , emp 테이블에도 deptno가 있고 dept 테이블에도 deptno가 있어서 deptno를 표기할 때는 아래와 같이 해주어야 합니다.

emp.deptno 혹은 dept.deptno (테이블명.컬럼명)

 

 

사실 조인한 테이블끼리 중복되는 컬럼이 없다면 컬럼명만 작성해도 되고 테이블명.컬럼명을 작성하실 필요는 없습니다.

하지만, 쿼리에서 조인을 사용했다면 컬럼들이 중복될 수 있는 것이 있을 수 있기 때문에 테이블명.컬럼명으로 명시하는 것이 좋습니다. 

 

 

그럼 조금 전 위의 예제를 바꾸어서 실행하여 보겠습니다.

ename, dname, deptno를 emp.ename, dept.dname, emp.deptno 이런 식으로 테이블명.칼럼명을 주었습니다.

 

이상 없이 잘 실행되는 것을 확인할 수 있습니다.

조인을 하신다면 컬럼명 앞에 반드시 테이블명을 붙여주세요. (테이블명.컬럼명)