我正在尝试将内部联接嵌套在右联接内的访问通道中 第一个右连接查询是
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条目。
希望这更有意义。
答案 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
。