티스토리 뷰

Table간에 JOIN을 해줄 때 조심해야하는 것 중에 하나가 컬럼 명을 제대로 명시해줘야한다는 점인 것 같다.

 

가상의 A테이블과 B테이블이 있다고 가정해보자

<<A테이블>> <<B테이블>>
primary_a primary_b
name name
date_a date_b

뭐 이런식으로... 테이블마다 컬럼이 3개가 있다고 치자.

여기서 name이라는 값이 동일한데, 이 두 테이블을 각각의 기본키로 조인한다고 가정하자

SELECT A.*, B.* FROM A
 JOIN B ON B.primary_b = A.primary_a ;

이렇게 하면 아무 문제 없이 작동할 것이다.

왜냐면 *앞에 테이블 명을 명시해줬으니까.

하지만 B테이블의 name값은 필요없다는 가정 하에 또 조인을 해보자.

SELECT primary_a, name, date_a, primary_b, date_b
 FROM A
 LEFT JOIN B
 ON B.primary_b = A.primary_a ;

이렇게 하면 Column "name" in  field list is ambiguous. 이런 에러가 나겠지?

왜냐면 중복되는 name 컬럼이 어느 테이블에 있는걸 조회하는 건지를 모르니까

SELECT A.*, B.* FROM A
 JOIN B ON B.primary_b = A.primary_a
 ORDER BY name ;

이렇게 정렬할 때도 중복되는 컬럼의 값으로 정렬을 하고자 하면 

 Column "name" in  order clause is ambiguous. 이렇게 에러메시지가 뜬다.

어떤 테이블의 name 컬럼 값으로 정렬할 지 모르기때문이다.

 

SQL 오류(1052) 가 뜬다면 이런 부분을 우선적으로 확인해주는 것이 좋을 것 같다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함