본문 바로가기
MySQL

이메일 중복 값 탐색 시 UNION을 이용한 처리

by 준그래머 2021. 2. 21.
반응형

개인 프로젝트에서 회원가입 시 이메일 중복에 대한 로직을 짜게 됐는데, 여기서 고민해야 되는 게 탈퇴한 지 얼마 안 된 계정의 데이터를 남겨둬야 해서 탈퇴한 계정과 현재 사용 중인 계정의 이메일 값을 체크해서 중복 이메일을 판단해줘야 했다.

 

특히 나 같은 경우는 user_info 테이블에 사용 중인 계정의 데이터를 넣고 탈퇴한 계정은 user_info에서 삭제하고 withdrawal_user_info라는 테이블에 넣는 방식으로 처리하기 때문에 두 테이블을 동시에 탐색하는 쿼리가 필요했다.

 

처음 떠올린건 너무나도 익숙한 JOIN을 사용한 탐색이었다. 그러나..... JOIN 방식으로 처리하려니 문제가 생겼다.

user_info와 withdrawal_user_info를 연결해줄 속성 값이 user_email인데 두 테이블 중 하나의 user_email 값은 무조건 null 인 상태이기 때문에 INNER를 하면 무조건 결괏값은 0이고 OUTER를 RIGHT냐 LEFT냐에 따라서 결과 값이 달라져 둘 다 원하는 결과 값을 얻지 못했다..(물론 이건 내 실력이 문제일 수도 있다.)

 

그래서 바로 다음 방법을 생각해낸게 UNION을 이용한 처리방식이었다. JOIN에서 삽질하다 보니 UNION은 상대적으로 너무 간단했던 게 SELECT문을 그냥 두 개 연결해서 붙여버리면 출력이 된다는 거다. (물론 이때 두 테이블 속성명과 타입을 똑같이 해야 한다. 이름이 다르면 as로 수정해서 붙임)

 

쿼리는 다음과 같다. select를 통한 탐색을 user_info 테이블에 user_email의 조건을 통해 뽑아내고 withdrawal_user_info테이블도 같은 방식으로 처리한다. 그 후에 UNION으로 통합해주면 user_email 속성 값에 칼럼이 나오게 된다. 

SELECT user_email FROM user_info WHERE user_email = "test123@gmail.com" 
UNION 
SELECT user_email FROM withdrawal_user_info WHERE user_email = "test123@gmail.com" 

 

 

결과는 다음과 같다.

 

반응형

'MySQL' 카테고리의 다른 글

[MySQL] CSV 파일을 HeidiSQL로 넣기  (0) 2021.02.21