【发布时间】:2018-04-27 00:26:06
【问题描述】:
我有一个名为 BST 的表,如下所示:
这里N是二叉树节点的值,P是它的父节点。我必须编写一个查询来确定一个节点是根节点、叶节点还是内部节点。我为此写了下面的 SQL 查询:
select N,
case
when P is null then 'Root'
when N in (select distinct P from BST) then 'Inner'
when N not in (select distinct P from BST) then 'Leaf'
end as type
from BST
但是,这并没有给我想要的结果,因为 Case 语句中“叶子”的最后一个条件不满足叶子节点。在这种情况下,我得到的输出低于:
我现在有一个解决方法,如下查询,它给了我预期的输出:
select N,
case
when P is null then 'Root'
when N in (select distinct P from BST) then 'Inner'
else 'Leaf'
end as type
from BST
预期输出:
但我不知道第一个有什么问题。有人可以解释一下吗?
【问题讨论】:
标签: sql sql-server tsql select null