2014-04-28 52 views
1

我有一個已經存在的SQL請求,加入8個表格,我需要添加3個表格來向我的數據添加兼容信息。如何在多個表上執行sql條件連接?

對於這個任務,我們可以忽略6個表(在other_tables捆綁):

db schema

紅色框中的部分是一個我得到了補充。我只想添加request尊重一些條件。如果沒有找到,我仍然希望我的人,但沒有數據在Request列。

到目前爲止,我試過這個,但多個left join似乎醜陋和包容。

Select [...], request.Id 
From [Action] inner join [other tables on ...] inner join 
    Person on Action.PersonId = Person.Id left JOIN 
request as r on r.PersonId = Person.Id left JOIN 
Subject as s on s.SubjectId = r.SubjectId left JOIN 
TypeRequest tr on tr.IDSujet = s.SubjectId 
Where 
([already existing conditions]) and typeRequest = 'MOVE' (?) 

而改變措辭一次我想要的東西:根據一些過濾器(其它)給我所有actions,也得到他們鏈接到person。如果該person具有特定TypeRequestRequest,請將Request id添加到數據行。

回答

1

上述查詢是否有效? 「看起來醜陋,太包容」有點模糊。 你會得到你想要的結果嗎? 也可以移動where子句的一部分的連接是這樣的:

Select [...], request.Id 
From [Action] inner join [other tables on ...] inner join 
    Person on Action.PersonId = Person.Id left JOIN 
request as r on r.PersonId = Person.Id left JOIN 
Subject as s on s.SubjectId = r.SubjectId left JOIN 
TypeRequest tr on tr.IDSujet = s.SubjectId **and typeRequest = 'MOVE'** 
Where 
([already existing conditions]) 
+0

我寫了「太包容性的」,因爲與查詢額外的'左join'返回多個結果(儘管它不應該改變)。而且'3 left join'感覺很難看,因爲_I感覺它應該是在'request'上的'left join'和''subject'和'typeRequest'上的'inner join'。 – Kraz

+0

如果您有三個共有1個字段的表,您只能從所有三個表中選擇結果和2個連接。也許你的表格過度標準化。 – b3ko

+0

我用你在回答中提出的建議,它似乎有效。謝謝。 (我也不能更改數據庫結構)。 – Kraz

相關問題