Programming/DB

[MySql] INNER JOIN에서 중복된 칼럼 처리

Acver 2022. 1. 27. 10:33

 이번에 외주 프로젝트를 백엔드 인수인계를 받으며 시작하였는데, 기존에 짜있던 코드에서 버그가 발생하니 어디를 손 봐야될 지 처음에는 막막했다.

 "분명 내가 인수인계를 받을 때는 이런 일은 없었는데"라는 생각도 들고, 특히 내가 작성한 코드가 아니다 보니 어디서 무엇이 잘못 되어 있는 지 찾는게 꽤나 시간이 오래 걸렸다.

 

 해당 문제는 DB Table 두개를 INNER JOIN 했을 때, 각 테이블에서 칼럼 명이 같은 칼럼이 존재하여 값을 의도한 값이 아닌 다른 값으로 프론트 단에서 읽는 것이었다.

 이를 해결하기 위해 Alias를 사용하여 해결하였다.

 

 가령 Pet table과 Owner table이 있다고 하였을 때,

pet Table은 (petNo(pk), ownerNo(fk), name, age), Owner Table은 (ownerNo(pk), name, address, phone) 각각 이렇게 구성되어 있다고 하였을 때,

SELECT * FROM Pet INNER JOIN Owner ON Pet.ownerNo = Owner.ownerNo;

위 코드를 실행하였을 때, 각 칼럼은 (petNo, ownerNo, name, age, name, address, phone)으로 나타난다. 즉 name 칼럼이 중복으로 존재하게 되어 우리가 의도하는 것과 다른 결과를 낼 가능성이 생기는 것이다.

 이를 방지하기 위해 Alias를 쓸 수 있다.

SELECT *, Pet.name AS petName FROM Pet INNER JOIN Owner ON Pet.ownerNo = Owner.ownerNo;

위처럼 AS(Alias)를 사용하여 Pet.Name을 petName으로 명시해주면 애완동물의 이름에 대한 칼럼을 petName으로 명시할 수 있다.

 

 지금까지는 direa에서 인턴을 한 이후로는 다시 같은 학부생들과 협업을 하거나, 진행 중인 프로젝트를 인수인계 받아 수행해본 적이 없었는데 이번에 이런 경험을 하면서 다른 사람이 어떤 의도로 코드를 작성하였고, 그 과정에서 내가 어떤 걸 보완할 수 있는 지에 대한 고민을 할 수 있게 되었다.