给定一个节点表(它们的Id及其父节点),如何获得所有根节点,内节点和叶节点?从表中获取根,内部和叶节点?
这是我到目前为止有:
根节点
SELECT Id, "Root" FROM NodeTable
WHERE ParentId IS NULL;
内部节点
???
叶节点
SELECT N1.Id, "Leaf" FROM NodeTable N1
LEFT JOIN NodeTable N2 ON N1.Id = N2.ParentId
WHERE N2.ParentId IS NULL;
这是正确的吗?有一种方法可以在一个查询中做到这一点吗?
真棒,太感谢你了!出于某种原因,当我自己运行内部查询时,每个节点都会出现两次。我对MySQL相当陌生,你能帮我理解为什么这样,我该如何解决它? –
其实,当我使用Union关键字时,问题就消失了。奇怪的! –
@IanMobbs Union是一个集合运算符。因此,如果一行被查询两次,然后与某事联合,那么该行只会显示一次。 – nasukkin