在右连接中访问嵌套内部连接

时间:2018-10-09 00:17:14

标签: sql ms-access inner-join right-join

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

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

在加入第一个选择语句的位置将具有d.MilestoneName

第二个内部联接查询是

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

因此,对于第二个结果(切换):在ProjectMilestone表中是条目ProjectMilestoneID 80,PredecessorMilestone是79,然后通过右连接到ProjectMilestone表的另一个实例来获得ProjectMilestoneID 79(因为它链接到相同的对象)表),从ProjectMilestoneID值为79的行中找到MilestoneID值(1),然后在MilestoneID 1(即移交)的Milestone表中找到对应的MilestoneName条目。

希望这更有意义。

1 个答案:

答案 0 :(得分:0)

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

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

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