Postgres - 仅为一对多关系获取一行

Postgres - Fetching one row only for a One to Many relationship

我在 Postgres 中有两个 Table。它们之间是一对多的关系。

经理Table

Id    Designation  
1     Manager

团队成员Table

Id    Designation  Report_To (ManagerId) 
4     INFRA ENG    1
2     SOFT ENG     1
3     TEAM LEAD    1

我必须以这样一种方式获取记录,即我只获得一个经理的一行,并将 TeamMember 指定为单独的列,如下所示:

结果:

ManagerId    INFRA  SOFT  TEAM
1            4      2     3

我尝试使用 LEFT JOIN,但它给了我 3 行。

他将不胜感激任何帮助。

您可以进行条件聚合:

select report_to as manager_id, 
    max(id) filter(where designation = 'INFRA ENG') as infra,
    max(id) filter(where designation = 'SOFT ENG')  as soft,
    max(id) filter(where designation = 'TEAM LEAD') as team
from teammember 
group by report to

请注意,您无需携带 manager table 即可获得您显示的结果。但是如果你出于其他原因想要它,你可以 join:

select m.*, 
    max(tm.id) filter(where tm.designation = 'INFRA ENG') as infra,
    max(tm.id) filter(where tm.designation = 'SOFT ENG')  as soft,
    max(tm.id) filter(where tm.designation = 'TEAM LEAD') as team
from manager m
inner join teammember tm on tm.report_to ) m.id
group by m.id