mysql中的层次结构查询

时间:2019-01-28 10:06:30

标签: mysql hierarchical

-- PARENT_TABLE
seq     parent_id   name
0                   root
1       0           node1
2       1           node1_1
3       2           node1_1_1
4       1           node1_2
5       2           node1_1_2

-- CHILD_TABLE
id      name        flag
0       node1_1_1   true
1       node1_2     true
2       node1_1_2   false

-- Structure
(
        root
        └node1
          └node1_1
            └node1_1_1
            └node1_1_2
          └node1_2
    )
  1. 仅PARENT_TABLE的无叶节点存储在CHILD_TABLE中。 (PARENT_TABLE.name == CHILD_TABLE.name)

  2. PARENT_TABLE具有层次结构。

  3. 我想了解的内容 我想找到从PARENT_TABLE到其父母的所有名称,其CHILD_TABLE表中的flag列为true

  4. 所需结果示例(不进行排序)

seq parent_id name 3 2 node1_1_1 2 1 node1_1 1 0 node1 0 root 4 1 node1_2

1 个答案:

答案 0 :(得分:0)

也许您可以使用CTE:

WITH parents AS
(SELECT seq,parent_id,name FROM tblParent LEFT JOIN tblChild USING(name) WHERE flag
UNION ALL
SELECT c.seq,c.parent_id,c.name FROM tblParent AS c INNER JOIN parents ON parents.parent_id = c.seq)
SELECT * FROM parents