2016-10-12 109 views
-1

我不知道我的查詢可能有什麼問題,但在過去的幾個小時裏,我一直在努力地磨蹭我的頭。也許有人可能通過指出我錯了什麼來幫忙。SQL兩個表左連接與兩個表中的多個WHERE條件

我試圖從表1中獲取匹配成員,並在下面的查詢中從兩個表中的多個條件連接,但是它仍然返回空字段或者說行,即使當我確信存在匹配:

SELECT s.name, s.gender, s.level, s.program, s.registered 
    , s.available, s.dispic, c.staff, c.level, c.year, c.period 
FROM students s 
LEFT JOIN allots c ON s.level=c.level AND s.registered=1 AND s.available=0 
WHERE c.staff=:staff 
    AND c.year=:year 
    AND c.period=:period 
    AND c.level=:level 
    AND c.subject:subject 
ORDER BY s.name DESC; 

所有的努力都證明是錯誤的。

+0

這將有助於如果你能提供的樣本數據,與給定的樣本數據,你會期望你的SQL返回結果輸出一起。 – MJH

+0

除了@ MJH的評論,你會提供一個SQL小提琴嗎? – halfer

回答

2

如果使用where子句限制左連接的右側,可以將其有效地更改爲內連接(因爲消除了右側返回的空行)(有關更多信息,請參見this question)。而不是在where子句中應用條件,將它們移到連接謂詞中。

這應該是你想要什麼:

SELECT s.name, s.gender, s.level, s.program, s.registered 
    , s.available, s.dispic, c.staff, c.level, c.year, c.period 
FROM students s 
LEFT JOIN allots c ON s.level=c.level 
    AND c.staff=:staff 
    AND c.year=:year 
    AND c.period=:period 
    AND c.level=:level 
    AND c.subject=:subject 
WHERE s.registered=1 AND s.available=0 
ORDER BY s.name DESC; 
+0

非常感謝您的支持,因爲我還沒有被保存,但我也學到了一些東西,在Joins中,從解決方案的方式來看,第二個表上的條件必須在ON子句上,在那裏第一個表格轉到WHERE子句,如果只是我是對的。我堅持要糾正!但是,我在學校,所以我會執行它並報告回來,因爲我記得嘗試了幾個解決方案,比如@invissible建議的,但沒有成功。我強烈希望這可以作爲一種魅力,因爲我沒有嘗試這種解決方案。再次感謝。 –

+0

請對不起,但這也沒有奏效。我的意思是它什麼都不做,甚至沒有發生錯誤。那麼可能是什麼原因? –

+0

@DerickMarfo沒有看到一些示例數據,我真的不能說什麼可能是錯的。該查詢應該適用於您描述的問題。也許你可以編輯你的問題,並添加一些示例數據和預期結果。 – jpw