我有以下数据表。
id|child
1|2
1|3
1|4
2|6
2|7
3|9
6|10
6|11
17|18
19|20
18|19
我需要获取如下数据。即一个id的所有子关系的超父母(比如这里1和19)。
这里我已经选择了所有孩子的超级父ID“1”
的递归id|all_child_id
1|2,3,4,6,7,9,10,11
在这里,我想选择所有超级父ID为'17'的孩子。
id|all_child_id
17|18,19,20
我不知道如何在sql中编写递归查询。
请不要让我创建中间表。
答案 0 :(得分:0)
这里需要你在MySQL中规避递归查询的内容称为"嵌套集模型" (参见章节"嵌套集模型"例如here)
您可以找到实施示例here。
我一直在寻找更好的教程页面但到目前为止还找不到。但我确定它们存在。因此,如果有人有更好的链接,请在此处提供评论。谢谢!
编辑:This是我之前寻找的教程,但遗憾的是它是用德语写的。如果您决定并且能够更改数据模型以适合嵌套集,那么SQL片段仍然可以帮助您。答案 1 :(得分:0)
这将有助于获得父母的所有孩子
declare @parent_id as int;
set @parent_id = 1;
WITH RecursiveTable (SR_NO, parent_id,name, Level)
AS
(
SELECT MaintTab.SR_NO,
MaintTab.parent_id,
MaintTab.name,
0 AS Level
FROM Product_Master_Final AS MaintTab
WHERE parent_id = @parent_id
UNION ALL
SELECT MaintTab.SR_NO,
MaintTab.parent_id,
MaintTab.name ,
LEVEL + 1
FROM Product_Master_Final AS MaintTab
INNER JOIN RecursiveTable Rtab ON
MaintTab.parent_id = Rtab.SR_NO
)
SELECT * FROM RecursiveTable