首页 > 解决方案 > 在右连接中访问嵌套内连接

问题描述

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

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),然后在 Milestone 表中为 MilestoneID 1 找到相应的 MilestoneName 条目,即移交。

希望这更有意义。

标签: sqlms-accessinner-joinright-join

解决方案


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

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

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如果您想要两个里程碑的名称,您可以添加另一个。


推荐阅读