SQL 코드카타
있었는데요 없었습니다
여연찌
2024. 3. 29. 14:39
- 관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다. 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일이 빠른 순으로 조회해야합니다.
# 내가 작성한 쿼리
SELECT i.animal_id, i.name
FROM animal_ins i INNER JOIN animal_outs o ON i.animal_id = o.animal_id
WHERE i.datetime > o.datetime
ORDER BY i.datetime
# 다른 쿼리
SELECT a.animal_id, a.name from animal_ins a, animal_outs b
where a.animal_id = b.animal_id and a.datetime > b.datetime
order by a.datetime
① FROM animal_ins i INNER JOIN animal_outs o ON i.animal_id = o.animal_id
# 보호 시작일과 입양일이 모두 존재하는 데이터를 가져와야한다.
② WHERE i.datetime > o.datetime
# 보호시작일이보다 입양일이 빨라야하기 때문에
보호시작일의 날짜가 입양일보다 낮아야한다.
③ ORDER BY i.datetime
# 보호시작일이 빠른 순으로 정렬해야한다.
# 오답
SELECT i.animal_id, i.name
FROM animal_ins i INNER JOIN animal_outs o ON i.animal_id = o.animal_id
WHERE i.datetime < o.datetime
ORDER BY 1
#오답
SELECT i.animal_id, i.name
FROM
(
SELECT i.animal_id, i.name, i.datetime, o.datetime
FROM animal_ins i INNER JOIN animal_outs o ON i.animal_id = o.animal_id
WHERE i.datetime > o.datetime
ORDER BY 3
) a
WHERE 조건에 조금 더 신경써야겠다.
inner join 을 할 경우 정보가 들어있는 모든 컬럼을 불러오는 건데,
select 에 적지 않았다고 datetime 을 추출하지 못하는 것이라고 생각했다.
select 에서 불러오지 않더라도 컬럼은 존재한다!