mysql 中的层次结构查询

hierarchical structure query in mysql

-- 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的leaf-free个节点存储在CHILD_TABLE中。 (PARENT_TABLE.name == CHILD_TABLE.name)

  2. PARENT_TABLE 具有层次结构。

  3. 我想知道的 我想找到从 PARENT_TABLE 到 parents 的所有名称,其 CHILD_TABLE table 中的标志列为 true

  4. 所需结果示例(未排序)

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

也许你可以使用 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