https://school.programmers.co.kr/learn/courses/30/lessons/301647
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT ED1.ID, ED1.GENOTYPE, ED2.GENOTYPE AS PARENT_GENOTYPE
FROM ECOLI_DATA ED1
JOIN ECOLI_DATA ED2 ON ED1.PARENT_ID = ED2.ID
WHERE (ED1.GENOTYPE & ED2.GENOTYPE = ED2.GENOTYPE)
ORDER BY ED1.ID
여기서 처음으로 SELF JOIN을 배웠다.
SELF JOIN은 무엇일까? 이름에서 짐작 할 수 있듯이 자기 자신을 참조하는 JOIN 기법이다.
1. SELF JOIN이란?
SELF JOIN은 같은 테이블을 두 번 사용하여 서로 다른 행을 조인하는 방식이야.
- 일반적으로 "상사-직원 관계", "부모-자식 관계" 같은 계층적 데이터에서 많이 사용된다
- 같은 테이블을 e1, e2 처럼 **별칭(Alias)**을 사용해서 구별해야 한다.
GPT에게 물어본 답변이다. 내가 실수 한 부분은 FROM절이다. JOIN은 FROM절을 기준으로 매칭을 한다. 기존 테이블을 두고 오른쪽에 JOIN하는 테이블을 매칭해서 붙이는 형태다. 난 어짜피 합쳐지면 그만 아님? 심정으로 아무렇게나 막 같다 붙였는데 여기서는 신중하게 합쳐야 했다.
문제로 들어가 보자. 문제에서 JOIN ECOLI_DATA ED2 ON ED1.PARENT_ID = ED2.ID 구문이 있다. ED1의 PARENT_ID와 ED2 ID가 같은 행을 찾아서 매칭한다. 그러면 기존 ED1 테이블에 ID가 부모인 것들이 찾아져서 매칭이 된다.
SQL 대장균 문제는 참 어렵다! 그래도 SELF JOIN을 알아서 너무 좋다.
'MYSQL > 프로그래머스 LV02' 카테고리의 다른 글
노선별 평균 역 사이 거리 조회하기 (0) | 2025.02.14 |
---|---|
물고기 종류 별 잡은 수 구하기 (0) | 2025.02.14 |
월별 잡은 물고기 수 구하기 (0) | 2025.02.14 |
특정 물고기를 잡은 총 수 구하기 (0) | 2025.02.13 |
분기별 분화된 대장균의 개체 수 구하기 (0) | 2025.02.13 |