选择sql树中的所有叶节点

时间:2018-02-02 19:50:19

标签: sql

给出一个表格(简化):

CREATE TABLE tree
(
    id INTEGER NOT NULL,
    node_id INTEGER,
    parent INTEGER
)

其中node_id是节点的id,parent是父节点的id。根节点有id=0

如何找到所有“叶子”节点,即所有其他节点都不是父节点的节点?

2 个答案:

答案 0 :(得分:0)

尝试LEFT self JOIN并检查NULL值:

SELECT leaf.node_id
FROM tree AS leaf
LEFT OUTER JOIN tree AS child on child.parent = leaf.node_id
WHERE child.node_id IS NULL

答案 1 :(得分:0)

我会使用not exists

select t.*
from t
where not exists (select 1 from tree t2 where t2.parent = t.node_id);

这非常等同于left join方法。我只是认为not exists更清楚了解查询的意图。