我的数据库中有一个存储树结构的表.以下是相关领域:
mytree (id, parentid, otherfields...)
我想找到所有叶子节点(即任何id
不是另一个记录的记录parentid
)
我试过这个:
SELECT * FROM mytree WHERE `id` NOT IN (SELECT DISTINCT `parentid` FROM `mytree`)
但那回归了一个空集.奇怪的是,删除"NOT"会返回所有非叶节点的集合.
谁能看到我哪里出错了?
更新:感谢答案人们,他们都是正确的,并为我工作.我已经接受了丹尼尔的,因为它也解释了为什么我的查询不起作用(NULL的事情).
您的查询不起作用,因为子查询包括NULL
.以下略有修改对我有用:
SELECT * FROM `mytree` WHERE `id` NOT IN ( SELECT DISTINCT `parentid` FROM `mytree` WHERE `parentid` IS NOT NULL)
不知道为什么你的查询不起作用.左外连接语法中的相同内容 - 以这种方式尝试吗?
select a.* from mytree a left outer join mytree b on a.id = b.parentid where b.parentid is null