SQL/다시 풀어 보기
[SQL-SELECT] 프로그래머스 Lv. 2 부모의 형질을 모두 가지는 대장균 찾기 [다시 풀어 보기]
스위태니
2024. 12. 19. 17:00
728x90
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/301647
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
틀린 코드
SELECT ID, GENOTYPE, GENOTYPE AS PARENT_GENOTYPE
FROM ECOLI_DATA AS ED
WHERE GENOTYPE & (SELECT GENOTYPE
FROM ECOLI_DATA AS SUB
WHERE ED.PARENT_ID = SUB.ID) > 0;
정답 코드
SELECT
E1.ID,
E1.GENOTYPE,
E2.GENOTYPE AS PARENT_GENOTYPE
FROM ECOLI_DATA E1
JOIN ECOLI_DATA E2
ON E1.PARENT_ID = E2.ID
WHERE (E1.GENOTYPE | E2.GENOTYPE) = E1.GENOTYPE
ORDER BY E1.ID;
풀이 과정
- FROM ECOLI_DATA E1 JOIN ECOLI_DATA E2 ON E1.PARENT_ID = E2.ID
- E1은 자식 대장균, E2는 부모 대장균을 나타낸다.
- E1.PARENT_ID = E2.ID 조건을 통해 자식 대장균과 부모 대장균의 관계를 연결한다.
- WHERE (E1.GENOTYPE | E2.GENOTYPE) = E1.GENOTYPE
- | 연산자: 비트 OR 연산자로, 자식 대장균의 형질이 부모 대장균의 형질을 포함하는지 확인한다.
- E1.GENOTYPE | E2.GENOTYPE은 자식 대장균과 부모 대장균의 형질을 OR 연산한 결과다.
- 결과가 E1.GENOTYPE과 동일하면, 부모의 모든 형질을 자식이 포함하고 있다는 뜻이다.
- | 연산자: 비트 OR 연산자로, 자식 대장균의 형질이 부모 대장균의 형질을 포함하는지 확인한다.
- SELECT E1.ID, E1.GENOTYPE, E2.GENOTYPE AS PARENT_GENOTYPE
- 자식 대장균의 ID (E1.ID)와 형질 (E1.GENOTYPE), 부모 대장균의 형질 (E2.GENOTYPE)을 선택한다.
- ORDER BY E1.ID
- 결과를 자식 대장균의 ID 기준으로 오름차순 정렬한다.
느낀점
- 조인을 하는 과정에서 부모 아이디와 아이디가 같은지 찾고 그 중에서 비트연산을 사용해 부모 형질을 모두 가진 대장균 찾기는 너무나 어려운 것 같다.
728x90