안내
본 문서는 블로그의 운영자인 본인이 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 목록을 얻고 싶다.
답변
User
중 Site_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” 카테고리의 추천 글
- MySQL IN subquery 성능. IN sub query는 가급적 사용을 피하자
- MySQL의 IN() v.s. EXISTS v.s. INNER JOIN 성능 비교
- MySQL INNER JOIN v.s EXISTS 성능 비교
- JOIN에서 중복된 레코드 제거하기
- MySQL 중복 레코드 관리 방법 - INSERT IGNORE, REPLACE INTO, ON DUPLICATE UPDATE
- MySQL GROUP BY 성능 최적화를 위한 INDEX 설계
- MySQL Query Cache를 빠르게 비우기
- MySQL Plugin에 대한 간단한 소개
- MySQL InnoDB Index Statistics
- MySQL Foreign key 사용 시 주의 사항 (Can’t create table (errno: 150))