我有以下表格:

User_Group

id  group_id  group_type
------------------------
1   100       A
1   100       B
2   101       B
2   102       A

Group_A

id   name
---------
100  A
101  B
102  C

Group_B

id   name
---------
100  D
101  E
102  F

我想要所有用户的组名(使用 array.agg() )。如果用户的组类型 = A,我们必须从组 A 中获取组名,如果用户的组类型 = B,则从组 B 中获取组名。结果应该是:
userid  groups
--------------
1       A,D
2       E,C

我为此创建了一个 fiddle,并给出了使用 2 个单独查询的并集的解决方案。可以在没有联合的情况下完成吗,我可以通过 user_groupsgroup_Agroup_B 的单个连接来决定从哪个表中选择组名?

最佳答案

select ug.id, array_agg(
    case ug.group_type
        when 'A' then g_a.name
        when 'B' then g_b.name
        else 'N/A'
    end)
from user_groups ug
left outer join group_A g_a on ug.group_id = g_a.id
left outer join group_B g_b on ug.group_id = g_b.id
group by ug.id

SQL Fiddle Example

10-04 21:33