-- 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的无叶节点存储在CHILD_TABLE中。 (PARENT_TABLE.name == CHILD_TABLE.name)
PARENT_TABLE具有层次结构。
我想了解的内容 我想找到从PARENT_TABLE到其父母的所有名称,其CHILD_TABLE表中的flag列为true
所需结果示例(不进行排序)
seq parent_id name
3 2 node1_1_1
2 1 node1_1
1 0 node1
0 root
4 1 node1_2
答案 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