如何解决Postgres-仅针对一对多关系获取一行
我在Postgres中有两个表。它们之间存在一对多的关系。
经理表
Id Designation
1 Manager
TeamMember表
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
表即可获得所显示的结果。但是,如果由于其他原因需要它,可以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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。