KEEP GOING

[MySQL] LeetCode : Tree Node (NOT IN) 본문

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을 포함해야 한다.

 

 

 

반응형

'code review > sql' 카테고리의 다른 글

[MySQL] LeetCode : Trips and Users (NOT IN)  (0) 2022.04.08
[MySQL] LeetCode : Market Analysis  (0) 2022.04.07
[MySQL] 3주차 (for coding test)  (0) 2022.03.07
[MySQL] 2주차  (0) 2022.03.06
[MySQL] 1주차  (0) 2022.02.28
Comments