PostgreSQL:LEFT JOIN不会返回整个左表

时间:2016-02-24 09:13:25

标签: sql postgresql left-join

我有两张桌子:

  1. town存储290个城镇
  2. hospital存储67个不同城镇的医院
  3. 以下查询返回290行,这是LEFT JOIN应该执行的操作:

    SELECT a.code, count(b.*) 
    FROM town a 
       LEFT JOIN hospital b ON a.code = b.town_code 
    GROUP BY a.code ;
    

    现在,我在下面的查询中添加一个WHERE子句来选择医院类型返回56行:

    SELECT
      a.code,
      count(b.*)
    FROM town a 
      LEFT JOIN hospital b ON a.code = b.town_code
    WHERE b.type = '01'
    GROUP BY a.code ;
    

    我不明白为什么,我想知道如何在第二个查询中获得290行?

1 个答案:

答案 0 :(得分:3)

LEFT JOIN时,将右侧表格条件放在ON子句中以获得真正的LEFT JOIN行为。 (在WHERE子句中,您会得到常规的INNER JOIN结果。)

SELECT
  a.code,
  count(b.*)
FROM town a 
  LEFT JOIN hospital b ON a.code = b.town_code AND b.type = '01'
GROUP BY a.code