[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);
이 편이 훨씬 더 깔끔한 쿼리가 될 것 같다.
Author And Source
이 문제에 관하여([SQL] 없어진 기록 찾기 풀이(LEFT JOIN, 차집합)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@cyanred9/SQL-없어진-기록-찾기-풀이LEFT-JOIN-차집합저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)