PostgreSQL:折叠多对多关系

fxnxkyjh  于 2023-04-05  发布在  PostgreSQL
关注(0)|答案(1)|浏览(94)

在PostgreSQL数据库中,我有一个people表,一个jobs表和一个名为people_to_jobs的多对多表
我想创建一个查询,对于每个人,将返回他们的工作名称 * 当该工作是唯一的 *,并取代一个字符串,如“多个工作”时,他们有很多。

表1:people person_id|人名---|--- 1|千斤顶2|莎拉3|乔治
表2:jobs

作业标识作业名称
1会计
第二章销售
研究

表3people_to_jobs

个人标识作业标识
11
第二章1
第二章第二章
第二章

所需的输出如下所示。注意第二行的值(Sarah =“Multiple jobs”)

输出:

个人标识人名作业名称
1杰克会计
第二章莎拉多个作业
乔治研究

.

cetgtptt

cetgtptt1#

试试这个:

SELECT p.person_name, 
    coalesce(case when count(distinct pj.job_id) > 1 THEN 'Multiple Jobs' end, max(j.job_name)) As job_name
FROM people p
INNER JOIN people_to_jobs pj ON pj.person_id = p.person_id
INNER JOIN jobs j on j.job_id = pj.job_id
GROUP BY p.person_name

相关问题