2015-08-09 140 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