2015-08-09 139 views
2

我有一個兩個表:玩家和遊戲。我想返回所有球員的名單,無論球隊是否參加比賽。如果他們的球隊打球,我想要game_id,否則替換爲NULL。左外連接不返回預期結果

我認爲這只是一個左外連接,但它只返回實際播放的球員列表。

SELECT a.id, b.match_id 
FROM player a 
    LEFT OUTER JOIN game b ON a.team_id = b.home_team_id or a.team_id = b.away_team_id 
WHERE b.round = 1 

我想這是基本的東西..對不起。

回答

6

您在外部表上的where條件會將外部聯接轉回到內部聯接中,因爲where只對非空值非空,但在外部聯接表中找不到匹配的行將全部爲空值。

您需要將您的where條件移入連接條件。

SELECT a.id, b.match_id 
FROM player a 
    LEFT OUTER JOIN game b 
    ON (a.team_id = b.home_team_id or a.team_id = b.away_team_id) 
    AND b.round = 1 
+0

或者,您可以將條件更改爲'COALESCE(b.round,1)= 1' – Bulat

+0

@Bulat。 。 。這是微妙的不同。 –

+0

@GordonLinoff在結果方面還是以什麼方式? – Bulat