문제
MYSQL
내가 작성한 오답
: Python,C# 모두를 가지고 있는 개발자는 2번 출력된다.
select d.id, d.email, d.first_name, d.last_name
from developers d
join skillcodes s on d.skill_code & s.code
where s.name in ('Python','C#')
order by 1 asc
내가 작성한 정답
: distinct를 추가하여 같은 아이디는 한 번만 출력되도록 한다.
select distinct d.id, d.email, d.first_name, d.last_name
from developers d
join skillcodes s on d.skill_code & s.code
where s.name in ('Python','C#')
order by 1 asc
비트 연산자 &를 사용하면 두 숫자의 같은 자리의 비트가 모두 1일 때만 1이 반환되는데
위의 on절에서 &를 사용하여 하나의 비트값이라도 겹치면 1이 출력이 되어 조인이 성립된다.
→ on (d.skill_code & s.code) = s.code으로 한정해 보다 명확하게 비교할 수 있다.
→ on (d.skill_code & s.code) <> 0
: <> 는 같지 않다
: 개발자의 skill_code에 s.code 비트가 하나라도 포함되어 있으면 해당 스킬이 있다고 판단
Share article