반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
SKILLCODES 테이블과 DEVELOPERS 테이블을 참고하여 Python이나 C#을 사용할 수 있는 개발자의 ID, EMAIL, FIRST_NAME, LAST_NAME을 조회해주세요
SELECT D.ID, D.EMAIL, D.FIRST_NAME, D.LAST_NAME
FROM DEVELOPERS D
WHERE EXISTS
(
SELECT 1
FROM SKILLCODES S
WHERE S.NAME IN ('Python', 'C#')
AND (S.CODE & D.SKILL_CODE = S.CODE)
)
ORDER BY D.ID ASC;
SKILLCODES의 CODE와 DEVELOPERS의 SKILL_CODE를 &연산했을 때 SKILLCODES의 CODE가 나오는 개발자의 정보를 출력하면 됩니다.
WHERE EXISTS는 서브쿼리가 결과를 반환하는지 여부를 확인하는 조건입니다.
만약 서브쿼리의 결과가 존재하면 해당 개발자의 레코드가 반환됩니다. SELECT 1은 조건에 맞을 때 1을 반환하고 맞지 않으면 아무것도 반환하지 않습니다. 여기서 WHERE EXISTS는 반환하는지 안하는지를 체크하기 때문에 1이 아니라 다른것을 넣어도 됩니다.
이때 아래와 같이 코드를 작성해도 찾을 수는 있지만 문제가 발생합니다.
SELECT D.ID, D.EMAIL, D.FIRST_NAME, D.LAST_NAME
FROM DEVELOPERS D, SKILLCODES S
WHERE S.NAME IN ('Python', 'C#')
AND (S.CODE & D.SKILL_CODE = S.CODE)
ORDER BY D.ID ASC;
두개의 테이블을 불러오게 되면 모든 경우의 수에 대해서 탐색하기 때문에 개발자를 중복되게 출력하는 문제가 발생할 수 있습니다.
따라서 중복되지 않도록 코드를 작성하는게 중요합니다.
아래의 코드도 중복되지 않는 방법 중 하나 입니다.
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS
WHERE SKILL_CODE & (SELECT CODE FROM SKILLCODES S WHERE S.NAME IN ('Python'))
OR SKILL_CODE & (SELECT CODE FROM SKILLCODES S WHERE S.NAME IN ('C#'))
ORDER BY ID ASC;
반응형
LIST
'알고리즘 문제 > 프로그래머스' 카테고리의 다른 글
프로그래머스 올바른 괄호 [Lv. 2] (C++) (0) | 2024.10.19 |
---|---|
프로그래머스 연도별 대장균 크기의 편차 구하기 [Lv. 2] (MySQL) (0) | 2024.10.17 |
프로그래머스 부모의 형질을 모두 가지는 대장균 찾기 [Lv. 2] (MySQL) (0) | 2024.10.16 |
프로그래머스 석유 시추 [Lv. 2] (C++) (0) | 2024.10.16 |
프로그래머스 충돌위험 찾기 [Lv. 2] (C++) (0) | 2024.10.15 |