我已經有MySQL DB,我嘗試獲取與給定項目編號的'ProjectId'或'ProjectScopeChangeID'有關的所有'Job'條目。有些項目有ProjectScopeChange,有些則沒有。SQL連接3個表格,其中一個是可選的
這對我來說是3個表格的不尋常關係,我嘗試了各種連接組合之後已經丟失了。這是問題的一部分的模式:
數據在ProjectScopeChange表是這樣的:
projectScopeChanngeID project
2 4
4 4
PlannedDisciplineJob表是這樣的:
plannedDisciplineJobID projectID projectScopeChangeID
1 4 {null}
2 4 {null}
14 4 {null}
4 {null} 2
而且由於項目 - 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專案編號4的PSC,但沒有工作)
projectID projectScopeChangeID plannedDisciplineJobID
4 {null} 1
4 {null} 2
4 {null} 14
4 2 4
預先感謝您的任何暗示導致正確的結果
那麼,我最終通過在前2條select語句中使用UNION得到了結果(並且修改的select列只能來自PDJ表),但在我看來,這並不是一種正確的做法。我仍然認爲它是正確的JOIN挑戰,所以我仍然想知道如何僅使用JOIN(沒有UNION)。它甚至有可能嗎? – Kuba