Postgresql 如果对应表上存在键,则posgresql从join返回聚合

Postgresql 如果对应表上存在键,则posgresql从join返回聚合,postgresql,join,foreign-keys,Postgresql,Join,Foreign Keys,我正在尝试执行一个连接操作,并使用下面在posgres中的查询从另一个表返回一个列的聚合 select users.username, users.id, string_agg(keys.service, ',') from users join keys on keys.user_id = users.id where users.username = 'test' group by users.id 当keys表中有相应的值时,查询工作正常,但如果没有,则查询失败。如果keys

我正在尝试执行一个连接操作,并使用下面在posgres中的查询从另一个表返回一个列的聚合

select users.username, users.id, string_agg(keys.service, ',') 
from users 
  join keys on keys.user_id = users.id 
where users.username = 'test' 
group by users.id

keys
表中有相应的值时,查询工作正常,但如果没有,则查询失败。如果
keys
表中没有与
users
表中的
id
对应的任何值,我希望它返回一个空字符串,您需要
左外部连接到
返回
键中没有相应行的
用户

然后,使用
coalesce()
null
键.service
值转换为空字符串

select users.username, users.id, 
       string_agg(coalesce(keys.service, ''), ',') 
  from users 
       left join keys 
              on keys.user_id = users.id 
 where users.username = 'test' 
 group by users.id

使用左连接。伙计,你救了我一天。