gpt4 book ai didi

mysql - 查找具有 0 或 1 个子树的子树中的所有节点

转载 作者:太空宇宙 更新时间:2023-11-03 12:23:31 26 4
gpt4 key购买 nike

在我需要处理的事情中,在给定的时间,我需要找到树的所有节点(使用物化路径 + 相邻节点制作)有 0 或 1 个子节点。这些列是这样的:

id int  
parent_node int
treepath VARCHAR(255)
deepness int

当我尝试为此提出解决方案时,我只能想到会使用太多子查询或表连接的非常复杂的查询。

对于有 0 个子节点的节点,我一直在考虑搜索所有未被 parent_id 引用且在子树中的节点。

SELECT *
FROM user_tree
WHERE
node_id NOT IN (
SELECT parent_id
FROM user_tree
WHERE parent_id IS NOT NULL
)
AND
treepath LIKE
(
SELECT CONCAT(treepath, '/%')
FROM user_tree
WHERE node_id = 4
)

使用 EXPLAIN,从获取节点列表所需的时间来看,这对于 DB 来说似乎有点痛苦。

是否有一种非非常痛苦的方式(在性能方面)来进行查询以找到我想要的内容?

编辑:
根据要求,这里是表格的一些示例格式:

id      parent_id   treepath    deepness
1 NULL 1 0
2 NULL 2 0
3 1 1/3 1
4 1 1/4 1
5 4 1/4/5 2
7 3 1/3/7 2
8 3 1/3/8 2
9 7 1/3/7/11 3

最佳答案

没有样本数据,这只是一个猜测:

SELECT t1.*, t2.numchildren
FROM user_tree t1
LEFT JOIN ( SELECT parent_id, COUNT(*) AS numchildren
FROM user_tree
GROUP BY parent_id ) t2
ON t1.id = t2.parent_id
WHERE t2.numchildren IS NULL
OR t2.numchildren = 1;

SQL-Fiddle from sample data

关于mysql - 查找具有 0 或 1 个子树的子树中的所有节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18683698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com