gpt4 book ai didi

postgresql - 在 Postgres 中将三个表连接在一起的更有效方法

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

我试图在 postgres 中将三个表链接在一起。

所有三个表都是从子查询生成的。第一个表通过变量 call_sign 作为 FULL JOIN 链接到第二个表(因为我想要两个表中条目的超集)。第三个表有一个 INNER JOIN,第二个表也在 call_sign 上(但理论上可以链接到第一个表)

查询运行但是很慢,我觉得随着我添加更多数据会变得更慢。我意识到我可以做一些事情来加快速度——比如不要在子查询中提取不必要的数据,也不要即时将文本转换为数字。但是有没有更好的方法来构造这三个表之间的 JOIN 呢?

任何建议将不胜感激,因为我是 postgres 的新手。

代码如下:

select 
(CASE
WHEN tmp1.frequency_assigned is NULL
THEN tmp2.lower_frequency
ELSE tmp1.frequency_assigned END) as master_frequency,
(CASE
WHEN tmp1.call_sign is NULL
THEN tmp2.call_sign
ELSE tmp1.call_sign END) as master_call_sign,
(CASE
WHEN tmp1.entity_type is NULL
THEN tmp2.entity_type
ELSE tmp1.entity_type END) as master_entity_type,
(CASE
WHEN tmp1.licensee_id is NULL
THEN tmp2.licensee_id
ELSE tmp1.licensee_id END) as master_licensee_id,
(CASE
WHEN tmp1.entity_name is NULL
THEN tmp2.entity_name
ELSE tmp1.entity_name END) as master_entity_name,
tmp3.market_name
FROM
(select cast(replace(frequency_assigned, ',','.') as decimal) AS frequency_assigned,
frequency_upper_band,
f.uls_file_number,
f.call_sign,
entity_type,
licensee_id,
entity_name
from combo_fr f INNER JOIN combo_en e
ON f.call_sign=e.call_sign
ORDER BY frequency_assigned DESC) tmp1
FULL JOIN
(select cast(replace(lower_frequency, ',','.') as decimal) AS lower_frequency,
upper_frequency,
e.uls_file_number,
mf.call_sign,
entity_type,
licensee_id,
entity_name
FROM market_mf mf INNER JOIN combo_en e
ON mf.call_sign=e.call_sign
ORDER BY lower_frequency DESC) tmp2
ON tmp1.call_sign=tmp2.call_sign
INNER JOIN
(select en.call_sign,
mk.market_name
FROM combo_mk mk
INNER JOIN combo_en en
ON mk.call_sign=en.call_sign) tmp3
ON tmp2.call_sign=tmp3.call_sign
ORDER BY master_frequency DESC;

最佳答案

如果可以的话,您会希望展开这些查询并在一个连接中完成所有操作。像这样的东西:

select <whatever you need>
from combo_fr f
JOIN combo_en e ON f.call_sign=e.call_sign
JOIN market_mf mf mf ON mf.call_sign=e.call_sign
JOIN combo_mk mk ON mk.call_sign=en.call_sign

我不能完全理解你在做什么,但是为了处理呼号出现或不出现的地方,一些连接子句可能必须变成 LEFT JOIN。

关于postgresql - 在 Postgres 中将三个表连接在一起的更有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43411326/

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