Left Outer Join未返回预期结果

时间:2015-08-09 13:39:00

标签: sql postgresql join

我有两张桌子:玩家和游戏。我想返回所有球员的名单,无论他们的球队是否参赛。如果他们的团队确实在玩游戏,我想要game_id,否则替换为NULL。

我认为这只是一个LEFT OUTER JOIN,但它只返回实际播放的玩家列表。

#define SWAP_PTRS(a, b) do { void *t = (a); (a) = (b); (b) = t; } while (0)

Node* MergeLists(Node* list1, Node* list2) 
{
  Node *list = NULL, **pnext = &list;

  if (list2 == NULL)
    return list1;

  while (list1 != NULL)
  {
    if (list1->data > list2->data)
      SWAP_PTRS(list1, list2);

    *pnext = list1;
    pnext = &list1->next;
    list1 = *pnext;
  }

  *pnext = list2;
  return list;
}

我想这是基本的东西..抱歉。

1 个答案:

答案 0 :(得分:6)

外部表上的where条件将外部联接转换回内部联接,因为where仅对非空值的值为true,而在此处找不到匹配的行外连接表将具有所有空值。

您需要将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