2011-11-03 103 views
0

我有一個表Languages它存儲在Persons表中每個人存儲的語言能夠說話,然後我有一個表Homework它存儲了每個人必須做的所有功課,但與一個語言。我能夠選擇作業人員1必須爲語言1(左連接)做的事情,但也希望能夠在語言人員1能夠談話的相同查詢中選擇。有人能給我一個提示如何做到這一點?對語言的左連接會影響結果,因爲這會與家庭作業表上的語言混淆。簡單的SQL查詢問題

語言和人是多方面的,家庭作業和人員也是如此。

這一工程,但得到螺釘,當我添加第二個left join

SELECT p.id, l.id, h.id 
FROM Persons AS p 
LEFT JOIN Homework AS h ON h.person_id = p.id 
#LEFT JOIN Languages AS l ON l.person_id = p.id #Screws the result multipliying by the number of available languages 
WHERE p.id = 1 
AND h.language_id = 1 

我想上面的查詢相結合,以下內容:

SELECT * 
FROM languages 
WHERE person_id=1 
+2

請問您能否更詳細地描述一下,第二次加入會如何影響您的結果?你得到的一個例子,你想得到什麼會很好。 – socha23

+0

你可以嘗試勾勒出你想要的表格嗎? – fluent

+0

嗨,thx很多答案。我無法爲您提供結果,因爲這是我從一個更復雜的問題中得到的簡化問題。問題是,如果你在Languages表中有3種語言,那麼最後的左連接將使結果成爲3倍「大」。 – user846226

回答

1

你試圖找到?

Person | Language | Homework 
------------------------------ 
Bob | English | 
Bob | French | 
Bob | Spanish | Geography 

James | English | 
James | French | History 
James | Spanish | 

使用此...

SELECT p.id, l.id, h.id 
FROM Persons AS p 

LEFT JOIN Languages AS l ON l.person_id = p.id 

LEFT JOIN Homework AS h ON h.language_id = l.id 
    And h.person_id = p.id 

或者

Person | Language | Homework 
------------------------------ 
Bob | Spanish | Geography 
James | French | History 

我相信這是什麼已經提出

UPDATE:這現在應該給你的人所有的語言,但只顯示您想要的語言匹配的作業

SELECT p.id, l.id, h.id 
FROM Persons AS p 

LEFT JOIN Languages AS l ON l.person_id = p.id 

LEFT JOIN Homework AS h ON h.language_id = l.id 
    And h.person_id = p.id 
    And h.language_id = 1 
+0

該查詢將正常工作,但我也想追加類似:AND h.language_id = X,因此它只顯示屬於language = x的作業,但也會顯示與某人相關的可用語言。 Thx很多:) – user846226

+0

添加了額外的條件,應限制基於語言返回的作業。 – fluent