- 관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다. 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 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 에서 불러오지 않더라도 컬럼은 존재한다!
'SQL 코드카타' 카테고리의 다른 글
3월에 태어난 여성 회원 목록 출력하기 # MONTH() (0) | 2024.03.31 |
---|---|
가격대 별 상품 개수 구하기 # TRUNCATE(숫자, 버릴 자릿수) (0) | 2024.03.31 |
진료과별 총 예약 횟수 출력하기 # MONTH() (0) | 2024.03.28 |
입양 시각 구하기(1) # HOUR() (0) | 2024.03.28 |
이름에 el이 들어가는 동물 찾기 (0) | 2024.03.24 |