我有以下表格:
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_groups
、 group_A
和 group_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