首页 > 解决方案 > 如果相应表上存在键,则 posgresql 从联接返回聚合

问题描述

我正在尝试执行连接操作并使用 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,我希望它返回一个空字符串keysidusers

标签: postgresqljoinforeign-keys

解决方案


您需要LEFT OUTER JOINintokeys以返回users没有相应行的keys.

然后,用于coalesce()null keys.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

推荐阅读