sql - 如果 condition1 为真,则将一个表与一个表连接,如果条件 1 为假,则与另一个表连接?

标签 sql postgresql join postgresql-8.4 postgresql-9.0

我有以下表格:

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

关于sql - 如果 condition1 为真,则将一个表与一个表连接,如果条件 1 为假,则与另一个表连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13032666/

相关文章:

MySQL 在另一列下面追加一列

MySQL 查询浏览器替代品

postgresql - PL/代理在存储过程调用中返回不支持的类型

sql - 为什么这个 SQL 代码给出错误 1066(不是唯一的表/别名 : 'user' )?

MYSQL 仅在最大行上连接来自多个表的数据

sql - 在 PostgreSQL 中将重叠的间隔分割成较小的、接触的间隔

sql - 一次在多个数据库上运行相同的 .sql 脚本的简单方法?

sql - PostgreSQL 转换数据

mysql - 从一行中选择两个不同的值

mysql - 如何使用 HQL 连接提供额外参数