You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:15:03