
1. 문제설명

2. 접근방식 & 정답코드
SELF JOIN으로 부모-자식 관계를 동일한 테이블 내에서 조인해서 풀어주자.
하나의 테이블에 ALIAS를 줘서 마치 두 개의 테이블이 있는 것처럼 두 번 참조하는 것이다.
내가 알고 있는 가장 일반적인 SELF JOIN 예시는 직원별 매니저를 나타낸 1개의 테이블을 자기자신과 조인하는 것이다. 또 계층쿼리에서도 SELF JOIN이 많이 쓰인다.
이 문제에서도 하나의 테이블에 부모의 아이디와 자식의 아이디, 개체의 형질(GENOTYPE)이 모두 들어 있다. 부모의 테이블은 P로, 자식의 테이블은 그냥 A라고 별칭을 준 뒤 자식테이블의 PARENT_ID컬럼을 부모 테이블의 ID 값으로 조인 한다. 그 후 WHERE 절에 `A.GENOTYPE & P.GENOTYPE = P.GENOTYPE` 라는 조건을 주면 된다. 부모의 형질을 모두 보유한 대장균을 찾으라고 했기 때문에 자식의 형질과 부모의 형질을 비트연산해서 부모의 형질값과 매칭되는지 비교 해 주는 것이다.
SELECT A.ID, A.GENOTYPE, P.GENOTYPE AS PARENT_GENOTYPE
FROM ECOLI_DATA A JOIN ECOLI_DATA P
ON A.PARENT_ID = P.ID
WHERE A.GENOTYPE & P.GENOTYPE = P.GENOTYPE
ORDER BY A.ID; -- 자식 ID로 정렬
'코딩테스트 > SQL테스트' 카테고리의 다른 글
| [프로그래머스] 👩🏻💻 (MySQL) 업그레이드 된 아이템 구하기 (47) | 2024.11.19 |
|---|---|
| [프로그래머스] 👩🏻💻 (MySQL) SUM, MAX, MIN 문제 풀이 (49) | 2024.11.19 |
| [프로그래머스] 👩🏻💻 (MySQL) 특정 형질을 가지는 대장균 찾기 문제 풀이 (47) | 2024.11.19 |
| [프로그래머스] 👩🏻💻 (MySQL) 조건에 맞는 개발자 찾기 문제풀이 (67) | 2024.11.18 |
| [프로그래머스] 👩🏻💻 (Oracle/MySQL) 🐠 가장 큰 물고기 10마리 구하기 / 특정 물고기를 잡은 총 수 구하기 문제풀이 (49) | 2024.11.18 |