访问右联接中的嵌套内部联接



我正在尝试将内部连接嵌套在右侧连接的访问权限中 第一个右联接查询是

SELECT * FROM ProjectMilestone AS a
RIGHT JOIN ProjectMilestone AS b ON a.PredecessorMilestone = 
b.ProjectMilestoneID

其中,当连接第一个选择语句时,将具有 d.里程碑名称

第二个内部联接查询是

SELECT d.MilestoneName FROM ProjectMilestone AS c INNER JOIN Milestone AS d 
ON c.MilestoneID = d.MilestoneID

我通过访问权限阅读的是,在正确连接后仅进行内部连接存在问题,因此我不确定该怎么做。 任何帮助将不胜感激。谢谢。

示例数据:

ProjectMilestone Table
ProjectMilestoneID, MilestoneID, etc etc, PredecessorMilestone (which is linked to ProjectMilestoneID on a 0-1 to 1 cardinality)
79, 1 , , Null
80, 2, , 79
81, 3, , 80
Milestone Table
MilestoneID, MilestoneName
1, Handover
2, Deposit
3, Handover Panels

所以我追求的结果是:

Null 
Handover 
Deposit

因此,对于第二个结果(切换(:在项目里程碑表中是条目ProjectMilestoneID 80,前置里程碑是79,然后通过右联接到项目里程碑表的另一个实例(因为它链接到同一个表(来获取项目里程碑ID 79,以从项目里程碑ID值79的行中查找里程碑ID值(1(,然后在里程碑ID的里程碑表中找到相应的里程碑名称条目,即移交。

希望这更有意义。

通常,您不会像这样混合内部和外部连接。 从要保留其行的表开始。 然后为所有其他表添加LEFT JOINs。

如果需要第一个里程碑的里程碑名称,可以执行以下操作:

SELECT pm.*, pmp.*, m.MilestoneName
FROM (ProjectMilestone AS pm LEFT JOIN
ProjectMilestone AS pmp
ON pm.PredecessorMilestone = pmp.ProjectMilestoneID
) LEFT JOIN
Milestone AS m
ON pm.MilestoneID = m.MilestoneID;

如果需要两个里程碑的名称,可以添加另一个LEFT JOIN

最新更新