[SQL] 없어진 기록 찾기 풀이(LEFT JOIN, 차집합)


(천재지변...정말 너무한거 아닌가...)

입양을 간 기록(ANIMAL_OUTS)은 있는데, 보호소에 들어온 기록(ANIMAL_INS)이 없는 ID와 이름을 찾아야 한다.

사실 내가 바로 생각한 풀이는 LEFT JOIN 이어서,

SELECT OUTS.ANIMAL_ID, OUTS.NAME
FROM ANIMAL_OUTS AS OUTS
    LEFT JOIN ANIMAL_INS AS INS
    ON OUTS.ANIMAL_ID = INS.ANIMAL_ID
WHERE INS.DATETIME IS NULL

이렇게 작성을 했었는데,

INS 테이블에도 특정 ID가 유실되어 있다면 LEFT JOIN 하기엔 까다로울지도 모르겠다.
(일단 주어진 예시 내에서는 이렇게 풀었다.)

문제 풀이를 보다 보니 차집합 개념으로 푸는게 있었는데, 훨씬 깔끔한것 같다.

A의 ID가 B테이블의 ID에는 없는걸 찾고싶을때는

SELECT A의 ID from A테이블 WHERE A의 ID NOT IN (SELET B의 ID from B테이블)

이렇게 NOT IN 조건을 걸어서 풀어주면 된다.
여기선 ID가 ANIMAL_OUTS에는 있는데, INS에는 없는걸 찾아야 하기에

SELECT ANIMAL_ID, NAME FROM ANIMAL_OUTS
WHERE ANIMAL_ID NOT IN
    (SELECT ANIMAL_ID FROM ANIMAL_INS);

이 편이 훨씬 더 깔끔한 쿼리가 될 것 같다.

좋은 웹페이지 즐겨찾기