본문 바로가기
SEO's Study/프로페셔널한 이야기

프로그래머스 코딩테스트 :: 있었는데요 없었습니다(MySQL)

by 신SEO세오 2020. 9. 20.
반응형

 

[접속 사이트] 프로그래머스 programmers.co.kr

[문제] ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블이고, ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸      

정보를 담은 테이블이다. 관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다. 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성하시오. 

단, 결과는 보호 시작일이 빠른 순으로 조회해야 합니다.

 

 

[나의 풀이] 

앞선 문제 풀이 '없어진 기록찾기'와 같이 2개의 테이블을 활용해 문제를 푸는 내용으로 JOIN을 해보려 했으나 원하는 결과 값이 나오지 않았습니다. FULL OUTER JOIN을 통해 전체 데이터 중 ANIMAL_INS.DATETIME > ANIAML_OUTS.DATETIME 조건으로 시행하려 햇으나 계속 오류가 뜨더라구요 ㅠㅠ  이것저것 두드려보다가 EQUI(등가) JOIN을 사용했을 때 올바른 값을 나타냄을 알아냈습니다 ㅠ 

 

EQUI(등가) JOIN
 - 두 개의 테이블에서 '='를 사용해 같은 값을 조인해 두 테이블을 연결한다

SELECT * FROM a, b 
WHERE a.<fieldName> = b.<fieldName> 

 

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 

 

[실행 결과]

 

 

그런데 왜 EQUI 조인이어야만 하는지 잘 모르겠습니다..

INNER JOIN도 EQUI 조인과 마찬가지로 등가 조인이며 동일한 데이터를 JOIN해 두 테이블을 합치는데 WHERE문이 아닌 ON문을 사용해 동일한 조건을 입력합니다만, 에러가 발생하더군요 ㅠㅠ 이 사유에 대해서는 조금 더 고민해봐야겠습니다..

 

반응형

댓글