[프로그래머스] SQL/오답 노트

[lv3] 조건에 맞는 개발자 찾기

SH3542 2024. 10. 18. 20:20

https://school.programmers.co.kr/learn/courses/30/lessons/276034

 

SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS
WHERE BIN(SKILL_CODE) & (SELECT BIN(SUM(CODE)) FROM SKILLCODES WHERE NAME IN ('C#', 'Python')) > 0
ORDER BY ID

 

BIN()은 NUMBER을 2진수 값으로한 "문자열"을 반환한다. 따라서 이 쿼리는 문자열간의 비트 연산을 수행하므로 예상치 못한 값이 된다.

 

제출 후 문제가 생긴 이유를 찾고 정수의 비트연산으로 수정했다.

 

또한, 어차피 &연산간 일치하는 값이 없다면 0을 반환하게 되므로 " > 0"구문을 지웠다.

WEHERE 0은 곧 WHERE FALSE로 평가된다.

 

SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS
WHERE SKILL_CODE & (SELECT SUM(CODE) FROM SKILLCODES WHERE NAME IN ('C#', 'Python'))
ORDER BY ID