sql使用关系迭代两个父-子表

sql使用关系迭代两个父-子表,sql,sql-server,common-table-expression,Sql,Sql Server,Common Table Expression,假设我有两个表,其中包含父子关系 简介: 报告: 档案报告: 和用户配置文件: 我的场景是首先查找用户的配置文件列表,然后查找用户配置文件的报告树。 到目前为止,我尝试的是: ;WITH ProfileReports AS ( SELECT pr.ReportId as ReportId FROM ProfileReport AS pr INNER JOIN [Profile] AS p ON pr.ProfileId = p.Id AND p.[Stat

假设我有两个表,其中包含父子关系

简介:

报告:

档案报告:

和用户配置文件:

我的场景是首先查找用户的配置文件列表,然后查找用户配置文件的报告树。 到目前为止,我尝试的是:

;WITH ProfileReports AS 
(
 SELECT  pr.ReportId as ReportId
FROM     ProfileReport AS pr
         INNER JOIN [Profile] AS p ON pr.ProfileId = p.Id AND p.[Status] = 1
         INNER JOIN UserProfile AS up ON p.Id = up.ProfileId AND up.[Status] = 1 
         INNER JOIN [User] AS u ON up.UserId = u.Id AND u.Id = 1 and u.[Status] = 1  
),
Parents
AS       (SELECT r.Id,
                 r.ParentId,
                 r.Name
          FROM   Report AS r
          WHERE   r.Id in (select ReportId from ProfileReports ) AND r.[Status] = 1
          UNION ALL
          SELECT p.Id,
                 p.ParentId,
                 p.Name
          FROM   Report AS p INNER JOIN Parents AS rl ON p.Id = rl.ParentId
          WHERE  p.[Status] = 1)
,Childs 
AS 
(
SELECT r.Id,
       r.ParentId,
       r.Name
          FROM   Report AS r
          WHERE   r.Id in (select ReportId from ProfileReports) AND r.[Status] = 1
          UNION ALL
          SELECT p.Id,
                 p.ParentId,
                 p.Name
          FROM   Report AS p INNER JOIN Childs AS rl ON p.ParentId = rl.Id
          WHERE  p.[Status] = 1

 )

 SELECT DISTINCT * FROM (
 SELECT  * FROM Parents
     UNION ALL
 SELECT  * FROM Childs) t

但是我不能正确地得到报告树。有没有办法找到配置文件树,然后找到与用户配置文件树对应的报告树?

这是用于哪个RDBMS的?请添加一个标记,以指定您使用的是
mysql
postgresql
sql server
oracle
db2
-还是其他完全相同的东西。@marc\s我使用sql-server@MehmetInce-以表格格式将样本数据和预期结果添加为文本