반응형
문제의 링크는 아래와 같습니다.
https://programmers.co.kr/learn/courses/30/lessons/59044
문제 분류가 join이라 먼저 join을 사용했다.
첫 번째 정답 코드입니다. left join을 사용했다.
left join으로 일단 ANIMAL_OUTS 테이블에 없는 데이터도 다 조인한 후에,
outs.ANIMAL_ID가 없는 것을 리턴하면 입양을 가지 못한 동물들만 거를 수 있다.
select ins.NAME, ins.DATETIME from ANIMAL_INS as ins
left join ANIMAL_OUTs as outs on ins.ANIMAL_ID = outs.ANIMAL_ID
where outs.ANIMAL_ID is NULL
order by ins.DATETIME limit 3
2 번째 정답 코드입니다. 서브 쿼리와 not in을 사용했습니다.
모든 ANIMAL_OUTS의 ANIMAL_ID 데이터 집합을 가져오고, 그 안에 ANIMAL_INS.ANIMAL_ID가 없다면 select 한다.
select NAME, DATETIME from ANIMAL_INS
where ANIMAL_ID not in (select ANIMAL_ID from ANIMAL_OUTS )
order by DATETIME limit 3
기억할 것
- in 안에 오는 select문은 단일 컬럼을 리턴해야 한다. 이것 때문에 조금 헤맸다.
- in 에서는 오른쪽에 집합을 지정. 왼쪽에 지정된 값과 같은 값이 집합 안에 존재하면 참을 반환한다.
반응형
댓글