https://leetcode.com/problems/find-customer-referee/description/?envType=study-plan-v2&envId=top-sql-50

코드설명

SELECT를 활용합니다

 

REFEREE_ID가 2가 아닌 경우의 레코드를 모두 가져옵니다. 

이떄, 유의할사항은 REFEREE_ID가 NULL인경우입니다.

NULL은 IS NULL 을 통해서만 비교할 수 있다는 것을 알아야합니다.

 

NULL <> 2 는 NULL 입니다. 그러므로 조건절에서는 당연히 TRUE가 아니므로 레코드를 올바르게 필터링하지 못합니다.

 

추가로, 정답코드1이 마음에 들지 않아, 정답코드2 로 처럼 IFNULL(REFEREE_ID, 0) <> 2 로 처리하고 싶어집니다.

하지만, 이렇게 할경우 REFEREE_ID에 INDEX가 존재한다면, 가공된 것으로 INNODB가 인식하여 INDEX를 올바르게 타지 못합니다. 해당 사항을 유의합니다.

MYSQL 코드

정답코드1입니다.

select name
from customer
where referee_id <> 2 or referee_id is null;

 

정답코드2입니다.

SELECT NAME
FROM CUSTOMER
WHERE IFNULL(REFEREE_ID, 0) <> 2;

+ Recent posts