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 에서 불러오지 않더라도 컬럼은 존재한다!