2017-07-16 81 views
0

请帮助我了解如何让所有家长参与提交。如果我通过submissionId表(黑色高亮显示),我应该得到所有家长对于提交(以红色突出显示)根据提交的SQL Server获取所有父母

enter image description here

的样本数据:

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 
+1

后的样本数据为文本..从未发布样本数据没有人可以使用它测试代码.. –

+0

发布,数据让我知道是否有办法我可以附加它 –

+0

它足够的还添加样本数据的预期结果..听说过'在SQL Server中的递归CTE? –

回答

2

你只需要改变连接条件。来自定位查询的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 

注:始终使用INNER JOIN语法,而不是旧式逗号分隔加入

+0

感谢您的帮助 –