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-以表格格式将样本数据和预期结果添加为文本