search:

사용자 목록 구하기

05 Mar 2014

안내

본 문서는 블로그의 운영자인 본인이 Stackoverflow에 올린 답변을 정리한 글입니다.

Stackoverflow URL

http://stackoverflow.com/questions/20137395/how-to-get-user-list/20137466

질문

다음과 같은 3개의 테이블이 존재한다.

User(userid, username, email)
Site_A(userid, username, status)
Site_B(userid, username, status)

User 테이블에 존재하는 userid 중 Site_A 혹은 Site_B에 존재하지 않는 userid 목록을 얻고 싶다.

답변

UserSite_A에 존재하지 않는 구문은 NOT IN을 이용하면 쉽게 구할 수 있으나 역시 성능을 고려한다면 LEFT JOIN을 사용하는 것이 좋다. 그런데 질문자는 Site_B에 존재하지 않는 User도 알고싶어하므로 2개의 질의를 UNION으로 묶으면 쉽게 구할 수 있는 문제이다.

SELECT  u.username
FROM User u LEFT JOIN Site_A USING(username)
WHERE Site_A.username IS NULL
 
UNION
 
SELECT  u.username
FROM User u LEFT JOIN Site_B USING(username)
  LEFT JOIN Site_B USING(username)
WHERE Site_B.username IS NULL

“MySQL” 카테고리의 추천 글