在SQL Server中基于提交获取所有父级

在SQL Server中基于提交获取所有父级,sql,sql-server,Sql,Sql Server,请帮助我了解如何获得所有家长的意见。如果我将submissionId传递到表中(以黑色突出显示),我应该获得该提交的所有家长(以红色突出显示) 样本数据: 5EAB0B3D-5A17-43A9-9BC2-21B950F4B4E7 24A6DB20-20D1-4063-9DC6-CC1990B26FD7 4DEA6377-DF7C-415E-8E06-7DDEB34B53F6 45D6A438-61C7-488C-BC83-8AAB491B037D 9B83B4D0-E122-462

请帮助我了解如何获得所有家长的意见。如果我将
submissionId
传递到表中(以黑色突出显示),我应该获得该提交的所有家长(以红色突出显示)

样本数据:

5EAB0B3D-5A17-43A9-9BC2-21B950F4B4E7    24A6DB20-20D1-4063-9DC6-CC1990B26FD7
4DEA6377-DF7C-415E-8E06-7DDEB34B53F6    45D6A438-61C7-488C-BC83-8AAB491B037D
9B83B4D0-E122-462F-842D-9A0A4774A6D5    24A6DB20-20D1-4063-9DC6-CC1990B26FD7
0BED1600-3120-4C3A-BA86-A3BFAC5765FA    9B83B4D0-E122-462F-842D-9A0A4774A6D5
DB5DF89E-0E6B-46FE-BE9A-CA6F47F4B544    24A6DB20-20D1-4063-9DC6-CC1990B26FD7
查询:

WITH n([submissionid], [parentid]) AS 
(
    SELECT 
        [submissionid], 
        [parentid] 
    FROM   
        [submissionrenewal] 
    WHERE  
        [submissionid] = '0BED1600-3120-4C3A-BA86-A3BFAC5765FA' 

    UNION ALL 

    SELECT 
        m.[submissionid], 
        m.[parentid] 
    FROM   
        [submissionrenewal] AS m, 
        n 
    WHERE  
        n.[submissionid] = m.[parentid]
)
SELECT DISTINCT * 
FROM n 
输入

0BED1600-3120-4C3A-BA86-A3BFAC5765FA 
输出

9B83B4D0-E122-462F-842D-9A0A4774A6D5 
24A6DB20-20D1-4063-9DC6-CC1990B26FD7

您只需要更改联接条件<锚查询中的code>Parentid应与
submissionid
递归部分连接。您只需在
where
子句
m.[submissionid]=n.[parentid]

WITH n([submissionid], [parentid]) -- giving a meaningful CTE name will improve the code readability  
     AS (SELECT [submissionid], 
                [parentid] 
         FROM   [submissionrenewal] 
         WHERE  [submissionid] = '0BED1600-3120-4C3A-BA86-A3BFAC5765FA' 
         UNION ALL 
         SELECT m.[submissionid], 
                m.[parentid] 
         FROM   [submissionrenewal] AS m 
                INNER JOIN n 
                        ON m.[submissionid] = n.[parentid]) --here
SELECT * 
FROM   n 

注意:始终使用
内部联接
语法,而不是老式的逗号分隔联接

您只需更改联接条件<锚查询中的code>Parentid应与
submissionid
递归部分连接。您只需在
where
子句
m.[submissionid]=n.[parentid]

WITH n([submissionid], [parentid]) -- giving a meaningful CTE name will improve the code readability  
     AS (SELECT [submissionid], 
                [parentid] 
         FROM   [submissionrenewal] 
         WHERE  [submissionid] = '0BED1600-3120-4C3A-BA86-A3BFAC5765FA' 
         UNION ALL 
         SELECT m.[submissionid], 
                m.[parentid] 
         FROM   [submissionrenewal] AS m 
                INNER JOIN n 
                        ON m.[submissionid] = n.[parentid]) --here
SELECT * 
FROM   n 

注意:始终使用
内部联接
语法,而不是老式的逗号分隔联接

将示例数据作为文本发布。。永远不要将样本数据作为图像发布没有人可以使用它测试代码..发布,数据让我知道是否有一种方法可以附加它足够也可以添加样本数据的预期结果。。听说过Sql Server中的
Recursive CTE
?我尝试过这个方法,但没有得到任何结果在questionPost中将查询和预期结果作为文本发布示例数据。。永远不要将样本数据作为图像发布没有人可以使用它测试代码..发布,数据让我知道是否有一种方法可以附加它足够也可以添加样本数据的预期结果。。听说过Sql Server中的
Recursive CTE
?我尝试过这个方法,但没有得到任何结果。尽管查询和预期结果有问题