我已经存在MySQL DB,在这里我尝试获得与给定项目号有关的“ProjeDeD”或“ProjistCopeCeNeCeEnID”的所有“作业”条目。有些项目有ProjectScopeChange,有些则没有。
这对我来说是3个表之间不寻常的关系,在尝试了各种连接组合之后,我已经迷失了。这是问题部分的架构:
ProjectScopeChange表中的数据如下所示:
projectScopeChanngeID project
2 4
4 4
计划的纪律作业表如下所示:
plannedDisciplineJobID projectID projectScopeChangeID
1 4 {null}
2 4 {null}
14 4 {null}
4 {null} 2
而且由于Project-PSC是一对多关系,Project没有任何关于PSC的专栏。
基本上,如果我只想获得项目的所有作业,我将使用以下代码:
select p.projectID,
pdj.plannedDisciplineJobID
from project p,
planneddisciplinejob pdj
where p.projectID = pdj.projectID
and p.number = ?
另外,如果我想为PSC找到所有的工作,我会用:
select p.projectID,
psc.projectScopeChangeID,
pdj.plannedDisciplineJobID
from project p,
projectscopechange psc,
planneddisciplinejob pdj
where pdj.projectScopeChangeID = psc.projectScopeChangeID
and p.projectID = psc.project
and p.number = ?
但是,当我试着把它组合成这样:
select p.projectID,
psc.projectScopeChangeID,
pdj.plannedDisciplineJobID
from project p
left join projectscopechange psc
on p.projectID = psc.project,
planneddisciplinejob pdj
where p.number = ?
and (pdj.projectID = p.projectID
or pdj.projectScopeChangeID = psc.projectScopeChangeID)
它只会导致一个组合
projectID projectScopeChangeID plannedDisciplineJobID
4 2 1
4 2 2
4 2 4
4 2 14
4 4 1
4 4 2
4 4 14
而不是预期的(4是projectd4的PSC,但没有作业)
projectID projectScopeChangeID plannedDisciplineJobID
4 {null} 1
4 {null} 2
4 {null} 14
4 2 4
提前感谢您的任何提示,以获得正确的结果
最佳答案
试试这个:
SELECT p.projectID, psc.projectScopeChangeID, pdj.plannedDisciplineJobID
FROM project p
INNER JOIN planneddisciplinejob pdj ON pdj.projectID = p.projectID
LEFT JOIN projectscopechange psc ON pdj.projectScopeChangeID = psc.projectScopeChangeID
WHERE p.number = ?