code review/sql

[MySQL] LeetCode : Tree Node (NOT IN)

jmHan 2022. 4. 7. 16:36
반응형

https://leetcode.com/problems/tree-node/submissions/

 

 

CASE WHEN 사용 ( IN )

SELECT id
      ,(CASE WHEN p_id IS NULL THEN 'Root'
             WHEN id IN (SELECT p_id FROM Tree) THEN 'Inner'
             ELSE 'Leaf'
        END)AS type
FROM Tree
ORDER BY id

CASE WHEN 사용 ( NOT IN )

SELECT id
      ,(CASE WHEN p_id IS NULL THEN 'Root'
             WHEN id NOT IN (SELECT p_id FROM Tree WHERE p_id IS NOT NULL) THEN 'Leaf'
             ELSE 'Inner'
        END)AS type
FROM Tree
ORDER BY id

 

 

* 주의할 점

NOT IN을 사용할 경우 소괄호의 서브쿼리를 처리할 때 유의할 점이다.

만약 서브쿼리절에 IS NOT NULL을 포함시키지 않는다면 다음과 같이 동작하게 된다.

id  != 1

id != 2

id != null

 

null과의 비교연산은 항상 unknown 값을 반환한다.

모든 레코드가 True를 반환하지 못하므로 type 컬럼 값이 'Leaf'에 해당하는 노드들은 'Inner'를 받게 된다. 

그러므로 NOT IN 절을 사용할 경우, 소괄호 안 서브쿼리는 반드시 IS NOT NULL을 포함해야 한다.

 

 

 

반응형