PostgreSQL左连接查询无符合条件数据时如何显示null值
问题原因
你当前的SQL中,WHERE子句对sale_order表的date_order字段做了范围过滤,这会直接过滤掉左连接后sale_order字段为空的记录,相当于把LEFT JOIN变成了INNER JOIN,自然就丢失了没有对应时间段订单的Emp A记录。
修改方案
把日期过滤条件从WHERE子句移动到LEFT JOIN的关联条件中即可,修改后的SQL如下:
SELECT string_agg(s.id::varchar,',') sale_ids, e.name from hr_employee e left join sale_order s on s.employee_id = e.id and s.date_order between '2021-08-01' and '2021-08-31' group by e.name
原理说明
日期条件放在JOIN关联条件中时,仅会过滤sale_order表的匹配记录,不符合日期要求的订单不会和员工关联,对应sale_order的所有字段会被置为NULL,不会过滤员工表的记录。string_agg聚合NULL值时会返回空值,正好符合你期望的输出效果。
内容的提问来源于stack exchange,提问作者SYAHRIL ASIDIQ FIRDAUS
相关产品推荐
相关产品推荐

