안내
본 문서는 블로그의 운영자인 본인이 Stackoverflow에 올린 답변을 정리한 글입니다.
Stackoverflow URL
http://stackoverflow.com/questions/20087399/remove-a-sub-query-and-want-a-single-query/20087453
질문
다음과 같은 SELECT문을 사용하는데 sub-query를 삭제하고 싶다
SELECT a1.`active_id`
FROM active_table a1
WHERE a1.`active_id` NOT IN (
SELECT a2.`active_id`
FROM view a2
GROUP BY a2.active_id
AND DATEDIFF(NOW(), active_date) > 9
)
답변
SELECT a1.`active_id`
FROM active_table a1 LEFT JOIN `view` a2 USING(active_id)
WHERE a2.`active_id` IS NULL
AND DATEDIFF(now(), active_date) > 9
NOT IN은 LEFT JOIN과 IS NULL을 이용하여 sub-query를 제거할 수 있다.
“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))