sql - 在右连接中访问嵌套内连接
问题描述
我正在尝试将内部连接嵌套在右连接内的访问中 第一个右连接查询是
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 条目,即移交。
希望这更有意义。
解决方案
通常,您不会像那样混合内部和外部联接。您从要保留其行的表开始。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
如果您想要两个里程碑的名称,您可以添加另一个。
推荐阅读
- python - 正则表达式的加号和减号以及字母?
- android - 您如何使用 espresso 测试操作栏后退按钮?
- laravel - 由于错误的域在wsl2下的docker中运行laravel而得到404
- html - 为什么这个容器会扩展到视口之外?
- linux - 如何在 yotco 中修补 Linux 内核源代码
- python - Flask wtf 表单未提交且无错误反馈
- json - 在Python中将geojson转换为数据框
- sql - 数字表的 SQL CTE 对静态值来说很快,但对表值来说很慢
- openmesh - OpenMesh 跳跃式循环器
- html - 一个TD在手机上消失?