2016-01-11 92 views
1

我currenty有應該做以下的查詢:LEFT JOIN查詢是不會按計劃

它檢查表「塔菲爾」如何「的玩家最大量」大部分是。然後進入'RoundRegistered'表,看看是否有人已經註冊到該表。

它現在所做的是:它檢查是否存在尚未滿的「塔菲爾」。如果是這樣的話,它會返回第一個,所以如果有更多它不關心它們,它只需要第一個。

但這是我的問題:如果在'RoundRegistered'表中沒有至少1條記錄,它將不會找到任何'Tafel'記錄。所以我想要做的是左連接,所以它仍然會在相同的限制條件下給出'Tafel'記錄。即阻止它的唯一的事情(我認爲)是HAVING ..

SELECT T.* FROM TAFEL AS T 
JOIN RoundRegistration AS RR ON RR.TafelID = T.ID 
WHERE RR.RONDE = 1 
GROUP BY T.ID 
HAVING COUNT(RR.ID) < T.Max_Aantal_spelers 
LIMIT 1 

任何人任何想法? 謝謝。

+0

該查詢中沒有'LEFT'。 – philipxy

+0

@philipxy真的,因爲一個LEFT連接不會返回任何東西..可能是因爲HAVING。 –

+0

您需要一個左連接才能獲取沒有出現在RoundRegistration中的表的行(用於給出回合)。 – philipxy

回答

0

與左嘗試加入

SELECT T.* FROM TAFEL AS T 
LEFT JOIN RoundRegistration AS RR ON RR.TafelID = T.ID 
WHERE RR.RONDE = 1 
GROUP BY T.ID 
HAVING COUNT(RR.ID) < T.Max_Aantal_spelers 
LIMIT 1 

沒有 '左' 的條款你在哪裏做一個 'INNER JOIN'

+0

這不會變成行.. –

0

WHERE子句撤消LEFT JOIN。將條件移至ON子句:

SELECT T.* 
FROM TAFEL T LEFT JOIN 
    RoundRegistration RR 
    ON RR.TafelID = T.ID AND RR.RONDE = 1 
GROUP BY T.ID 
HAVING COUNT(RR.ID) < T.Max_Aantal_spelers 
LIMIT 1 
+0

我添加了「AND RR.ToernooiID = 4」,但它返回了一行,其中'ToernooiID'爲1 .. xd所以AND似乎不起作用。 –

+0

@ThomasVieveen。 。 。我不完全理解你的評論。如果添加該條件,那麼您不會在結果集中看到這些值。 –