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