gpt4 book ai didi

mysql - 如何根据节点级别查找父级

转载 作者:行者123 更新时间:2023-11-29 09:38:31 25 4
gpt4 key购买 nike

我有表 tbl_budget,其中包含 id、budget_code 和 level 列。级别告诉层次结构 current table view

我想根据每个预算代码的级别找到其父级

此查询确实可以找到一级 parent ,但之后就不行了

选择 tb1.id ,(从 tbl_budget 中选择 buget_code,其中 level = tb1.level-1 LIMIT 0,1)作为 tbl_budget tb1 的父级

最佳答案

如果我正确理解了您的层次结构,那么您可以使用 LIKE 来比较 ON 子句中的预算代码:

select c.*, p.id as parent_id, p.budget_code as parent_budget_code
from tbl_budget c
left join tbl_budget p
on p.level = c.level - 1
and c.budget_code like concat(p.budget_code, '%')
order by c.id

结果:

| id  | budget_code | level | parent_id | parent_budget_code |
| --- | ----------- | ----- | --------- | ------------------ |
| 1 | 001 | 1 | | |
| 2 | 001-1 | 2 | 1 | 001 |
| 3 | 001-2 | 2 | 1 | 001 |
| 4 | 001-2-1 | 3 | 3 | 001-2 |
| 5 | 002 | 1 | | |
| 6 | 002-1 | 2 | 5 | 002 |
| 7 | 002-2 | 2 | 5 | 002 |

db-fiddle

另一种方法是使用SUBSTRING_INDEX():

select c.*, p.id as parent_id, p.budget_code as parent_budget_code
from tbl_budget c
left join tbl_budget p
on p.budget_code = substring_index(c.budget_code, '-', c.level - 1)
order by c.id

如果您只需要父级的budget_code,那么您甚至不需要连接,因为父级代码是子级代码的一部分,您只需提取它:

select c.*,
substring_index(c.budget_code, '-', c.level - 1) as parent
from tbl_budget c

关于mysql - 如何根据节点级别查找父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57124987/

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