PostgreSQL:LEFT JOIN 不 return 整个左 table
PostgreSQL: LEFT JOIN does not return entire left table
我有 2 个表:
town
存储了 290 个城镇
hospital
存储了 67 个不同城镇的参考医院
以下查询 returns 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 子句到 select 一种类型的医院 returns 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 行也与第二个查询一起发出?
当LEFT JOIN
时,将右侧table的条件放在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
我有 2 个表:
town
存储了 290 个城镇hospital
存储了 67 个不同城镇的参考医院
以下查询 returns 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 子句到 select 一种类型的医院 returns 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 行也与第二个查询一起发出?
当LEFT JOIN
时,将右侧table的条件放在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