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
)
只有PARENT_TABLE的leaf-free个节点存储在CHILD_TABLE中。
(PARENT_TABLE.name == CHILD_TABLE.name)
PARENT_TABLE 具有层次结构。
我想知道的
我想找到从 PARENT_TABLE 到 parents 的所有名称,其 CHILD_TABLE table 中的标志列为 true
所需结果示例(未排序)
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
-- 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
)
只有PARENT_TABLE的leaf-free个节点存储在CHILD_TABLE中。 (PARENT_TABLE.name == CHILD_TABLE.name)
PARENT_TABLE 具有层次结构。
我想知道的 我想找到从 PARENT_TABLE 到 parents 的所有名称,其 CHILD_TABLE table 中的标志列为 true
所需结果示例(未排序)
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