【发布时间】:2015-10-26 20:38:34
【问题描述】:
当表之间没有逻辑连接时,我需要帮助来编写更优化的 SQL 查询。我写了一些子查询,但我对它不满意,因为我重复了几乎相同的子查询两次。
方案是这样的:
create table rate (
rate_date date,
value decimal(10,2),
multiplier integer,
name varchar(3)
);
create table amount (
amount decimal(10,2),
amount_year date,
rate_name varchar(3)
);
我希望AMOUNT 表中的每个金额都使用RATE 表中的乘数和比率值来计算,例如amount / multiplier * rate。两个表的共同点是名称(一些代码标识符)和日期。这些应该用于将数据汇总在一起。仅考虑 amount_year 的最新费率。
如果您愿意提供帮助,可以查看此fiddle。这是我的尝试。
select am.amount /
(
select ra.multiplier
from rate ra
where ra.rate_date = (select max(rate_date)
from rate
where year(rate_date) = year(am.amount_year) and name = am.rate_name)
and ra.name = am.rate_name
) * (
select ra.value
from rate ra
where ra.rate_date = (select max(rate_date)
from rate
where year(rate_date) = year(am.amount_year) and name = am.rate_name)
and ra.name = am.rate_name
) as calculated_amount
from amount am;
【问题讨论】:
-
“表之间没有物理连接”是什么意思?它们在不同的数据库服务器上?
-
@Barmar 没有外键,没有索引等。假设它们可能在不同的架构上。
-
所以你的意思是没有逻辑连接。
-
@Barmar 你是对的。我编辑了我的帖子。
标签: mysql sql join subquery sql-optimization