给出一个表格(简化):
CREATE TABLE tree
(
id INTEGER NOT NULL,
node_id INTEGER,
parent INTEGER
)
其中node_id
是节点的id,parent
是父节点的id。根节点有id=0
。
如何找到所有“叶子”节点,即所有其他节点都不是父节点的节点?
答案 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
更清楚了解查询的意图。