예시)
Root
출력Leaf
노드로 간주Inner
로 간주SELECT N, (
CASE
WHEN P IS null THEN 'Root'
WHEN N NOT IN (SELECT DISTINCT P FROM BST) THEN 'Leaf'
ELSE 'Inner'
END
)
FROM BST
ORDER BY 1;
SELECT N, (
CASE
WHEN P IS null THEN 'Root'
WHEN N NOT IN (SELECT DISTINCT P FROM BST WHERE P IS NOT NULL) THEN 'Leaf'
ELSE 'Inner'
END
)
FROM BST
ORDER BY 1;
초기에 푼 문제를 보면
... WHEN N NOT IN (SELECT DISTINCT P FROM BST) THEN 'Leaf' ...
위와 같은 형태로 되어있는데 여기서
N
을null
값과 비교하게 된다는 것이다.
null
값은 비교연산 시 결과가unknown
이 되는데 이것은 항상ELSE
구문으로 넘어가기 때문에 오류가 발생한 것.
null
값은 비교연산 시 결과가 unknown
이 된다unknown
은 ELSE
구문으로 넘어간다.