【发布时间】:2019-09-06 18:26:46
【问题描述】:
我有 3 个表,我想创建一个视图,从 3 个表中垂直聚合数据(使用 UNIONS)。我已经有一个查询可以执行我想要的操作,但是它为每个查询使用了很多重复的连接,我想知道是否有一种方法可以只连接所有这些表一次并将联合放在上面。
我想加入 3 个表,我将调用它们 desiredTable1、desiredTable2 和 desiredTable3。
他们都使用joinTable、joinTable2 和joinTable3 上的连接,如下所示:
(select desiredTable1.id, desiredTable1.created_at, joinTable1.firstname, joinTable1.lastname, 'DESCRIPTOR_1' as "descriptor", desiredTable1.amount from desiredTable1
join joinTable3 on joinTable3.id = desiredTable1.joinTable3_id
join joinTable2 on joinTable2.id = joinTable3.joinTable2_id
join joinTable1 on joinTable1.id = joinTable2.joinTable1_id)
UNION
(select desiredTable2.id, desiredTable2.created_at, joinTable1.firstname, joinTable1.lastname, 'DESCRIPTOR_2' as "descriptor", desiredTable2.amount from desiredTable2
join joinTable3 on joinTable3.id = desiredTable2.joinTable3_id
join joinTable2 on joinTable2.id = joinTable3.joinTable2_id
join joinTable1 on joinTable1.id = joinTable2.joinTable1_id)
UNION
(select desiredTable3.id, desiredTable3.created_at, joinTable1.firstname, joinTable1.lastname, 'DESCRIPTOR_3' as "descriptor", desiredTable3.amount from desiredTable3
join joinTable3 on joinTable3.id = desiredTable3.joinTable3_id
join joinTable2 on joinTable2.id = joinTable3.joinTable2_id
join joinTable1 on joinTable1.id = joinTable2.joinTable1_id)
如您所见,我在每个查询中都需要来自joinTable1 的链接信息,但如果我能提供帮助,我不希望重复所有这些连接。有没有办法我可以“定义”一个执行所有这些连接的子查询,然后在此之上执行所有联合?
【问题讨论】:
标签: sql postgresql join union sql-view