gpt4 book ai didi

sql - 当多个 UNION 都进行相同的连接时,有没有办法使它们更有效?

转载 作者:行者123 更新时间:2023-11-29 12:49:25 25 4
gpt4 key购买 nike

我有 3 个表,我想创建一个 View 来垂直聚合 3 个表中的数据(使用 UNIONS)。我已经有一个查询可以执行我想要的操作,但是它为每个查询使用了很多重复的连接,我想知道是否有一种方法可以只连接所有这些表一次并将并集放在上面。

我想加入 3 个表,我将它们称为 desiredTable1desiredTable2desiredTable3

它们都在 joinTablejoinTable2joinTable3 上使用连接,如下所示:

(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 的链接信息,但如果我可以帮助它,我宁愿不重复所有这些连接。有没有一种方法可以“定义”一个执行所有这些连接的子查询,然后在其上执行所有联合?

最佳答案

您可以使用union allbefore加入:

select dt.id, dt.created_at, jt1.firstname, jt1.lastname, dt.descriptor,  dt.amount
from ((select dt1.*, 'DESCRIPTOR_1' as descriptor
from desiredTable1 dt1
) union all
(select dt2.*, 'DESCRIPTOR_2' as descriptor
from desiredTable2 dt2
) union all
(select dt3.*, 'DESCRIPTOR_3' as descriptor
from desiredTable3 dt3
)
) dt join
joinTable3 jt3
on jt3.id = dt.joinTable3_id join
joinTable2 jt2
on jt2.id = jt3.joinTable2_id join
joinTable1 jt1
on jt1.id = jt2.joinTable1_id;

注意:为方便起见,这使用 dt.* 作为子查询。如果表没有相同的列,则仅列出外部查询所需的列。

关于sql - 当多个 UNION 都进行相同的连接时,有没有办法使它们更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57826949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com