我已经存在MySQL DB,我尝试获取与给定项目编号相关的'ProjectId'或'ProjectScopeChangeID'的所有'Job'条目。有些项目有ProjectScopeChange,有些没有。
这对我来说是3个表的异常关系,我在尝试各种连接组合后已经丢失了。这是问题部分的模式:
ProjectScopeChange表中的数据如下所示:
projectScopeChanngeID project
2 4
4 4
PlannedDisciplineJob表如下所示:
plannedDisciplineJobID projectID projectScopeChangeID
1 4 {null}
2 4 {null}
14 4 {null}
4 {null} 2
由于Project-PSC是一对多的关系,项目没有关于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是ProjectID 4的PSC,但没有工作)
projectID projectScopeChangeID plannedDisciplineJobID
4 {null} 1
4 {null} 2
4 {null} 14
4 2 4
提前感谢任何提示导致正确结果的提示
答案 0 :(得分:0)
试试这个:
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 = ?