작성
·
167
1
안녕하세요! 좋은 강의 감사드립니다.
Binary Tree Nodes와 관련한 질문이 있습니다.
저는 BST 테이블의 node 중 parent가 아닌 node만 (leaf만) 뽑고 싶어서 아래와 같은 코드를 실행했는데 에러가 뜹니다.
SELECT N FROM BST
WHERE N NOT IN (SELECT DISTINCT P from BST)
NOT IN이 아닌 IN으로 실행하면 코드가 잘 돌아갑니다.
NOT IN이라는 문법을 제가 잘못 사용하고 있는 건지 궁금합니다.
그리고 제가 의도대로 데이터를 뽑으려면 어떤 구문을 써야 하는지도 궁금합니다.
답변 2
1
문제의 Sample Input을 예시로 설명 드리겠습니다.
SELECT N FROM BST WHERE N NOT IN (SELECT DISTINCT P from BST)
위 쿼리를 실행하면 N을 하나하나씩 2, 5, 8, Null과 비교해서 N!=2, N!=5, N!=8, N!=null, 이 4가지 연산 모두 True 값을 반환하는 경우에만 N이 출력됩니다.
그런데 null과의 비교연산에서는 True도 False도 아닌 Unknown 값을 반환하게 되므로, 어떤 N도 N!=null 을 통과하지 못합니다.
WHERE P IS NOT NULL 조건을 넣어주면 N과 null의 비교연산을 하지 않아도 되니 N!=2, N!=5, N!=8, 이렇게 3가지 조건을 모두 만족하는 값들이 출력됩니다.
아래에 유사한 질문과 답변이 있으니 참고 바랍니다.
1
P 컬럼에 null 값이 있어서 실행이 안됐던 것 같네요.
SELECT N
FROM BST
WHERE N NOT IN (SELECT DISTINCT P from BST WHERE P IS NOT NULL)
WHERE 조건을 넣어주니 잘 돌아갑니다. 그런데 왜 NOT NULL 조건을 명시해줘야 하는지는 모르겠습니다...ㅠㅠ