当前位置:  开发笔记 > 编程语言 > 正文

在分层树中查找叶节点

如何解决《在分层树中查找叶节点》经验,为你挑选了2个好方法。

我的数据库中有一个存储树结构的表.以下是相关领域:

mytree (id, parentid, otherfields...)

我想找到所有叶子节点(即任何id不是另一个记录的记录parentid)

我试过这个:

SELECT * FROM mytree WHERE `id` NOT IN (SELECT DISTINCT `parentid` FROM `mytree`)

但那回归了一个空集.奇怪的是,删除"NOT"会返回所有非叶节点的集合.

谁能看到我哪里出错了?

更新:感谢答案人们,他们都是正确的,并为我工作.我已经接受了丹尼尔的,因为它也解释了为什么我的查询不起作用(NULL的事情).



1> Daniel Spiew..:

您的查询不起作用,因为子查询包括NULL.以下略有修改对我有用:

SELECT * FROM `mytree` WHERE `id` NOT IN (
    SELECT DISTINCT `parentid` FROM `mytree` WHERE `parentid` IS NOT NULL)



2> TheSoftwareJ..:

不知道为什么你的查询不起作用.左外连接语法中的相同内容 - 以这种方式尝试吗?

select a.*
from mytree a left outer join
     mytree b on a.id = b.parentid
where b.parentid is null

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有