在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
?我尝试过这个方法,但没有得到任何结果。尽管查询和预期结果有问题