gpt4 book ai didi

MySQL 多重连接

转载 作者:行者123 更新时间:2023-11-29 07:56:21 24 4
gpt4 key购买 nike

我正在发出如下所示的请求:

SELECT main_table.*, <complicated calculation> AS computed_variable
FROM main_table
LEFT JOIN table1 ON main_table.id = table1.ref_id
LEFT JOIN table2 ON main_table.id = table2.ref_id
LEFT JOIN table3 ON main_table.id = table3.ref_id
GROUP BY main_table.id
HAVING computed_value > 1000
ORDER BY computed_variable ASC

这里的重要部分是复杂计算,即对不同的table3<进行SUM(类似于:SUM(table3.value * table3.duration))/em> 列。我应该注意到,绝对不可能将其从该 SQL 中丢弃,因为它用于排序“具有”约束

我从未遇到过的问题 - 两个(或更多)联接(table1,table2)使得 table3 的 SUM 不正确。据我所知 - 所有 table3 记录都被多次使用 ->准确地说,是 COUNT(table1) * COUNT(table2) 次。

如果我错了,请纠正我。

因此 - 最终值 (compulated_variable) 比应有的值大得多。

问题是 - 如何解决这个问题?

P.S table1 和 table2 连接也无法删除。我需要它们来进行其他重要的计算和约束。

但是它们不使用任何复杂的聚合函数,因此它们的记录是否重复并不重要。

有办法解决这个问题吗?

P.S 对于那些想看示例的人:http://sqlfiddle.com/#!2/57333/4

最佳答案

您在沿多个维度连接时遇到问题,即行数相乘。假设复杂的计算仅来自table3(正如您在问题中所描述的),您可以预先聚合结果:

SELECT m.*, <complicated calculation> AS computed_variable
FROM main_table m LEFT JOIN
table1
ON m.id = t1.ref_id LEFT JOIN
table2
ON m.id = t2.ref_id LEFT JOIN
(select t3.ref_id, <complicated calculation> AS computed_variable
table3 t3
group by t3.ref_id
) t3
ON m.id = t3.ref_id
GROUP BY m.id
HAVING computed_value > 1000
ORDER BY computed_variable ASC;

如果计算需要的话,您可能需要在子查询中包含更多表。

关于MySQL 多重连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25040974/

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