gpt4 book ai didi

mysql - MySql 查询的结果不准确

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

我有 2 个表(import_size、export_size)都包含这两列(size_id、weight)现在我正在尝试获取每个表中每个尺寸的权重总和,我的查询如下所示

SELECT sum(i.weight) imports,sum(e.weight) exports,s.size 
FROM size s
LEFT JOIN import_size i on s.id=i.size_id
LEFT JOIN export_size e on s.id=e.size_id
GROUP BY s.size

现在举例来说,在 import_size 表中对于大小 1 我们只有一条记录,但是对于相同大小在 export_size 表中我们有 2 条记录,import_size 产生的权重总和乘以 2,有什么想法吗?

例如:

导入表有1条记录:

size_id 1 - weight 2 

导出表有2条记录:

size_id 1 - weight 2  
size_id 1 - weight 3

查询结果:

imports 4 - exports 5 - size 1 

应该怎样

imports 2 - exports 5 - size 1

最佳答案

一般来说,联接会为每个符合条件的排列创建一行。您正在加入 3 个表。你是说对于尺寸 1,这些表有:

  • 大小:1 行
  • import_size:1 行
  • export_size:2 行

这给了我们 1*1*2=2 个排列,这意味着我们得到 2 行。显然每个都包含不同的 export_size 记录,但是 sizeimport_size 呢?这两行使用来自它们的相同记录。这意味着 import_size.weight 出现两次 - 这就是为什么它被加起来两次。

顺便说一句 - 如果两个表都有 2 个大小为 1 的条目,您将得到 4 个排列,并且导入和导出大小都将加倍。

解决方案:对每个表单独做聚合,然后做join(未测试):

SELECT i.imports, e.exports, s.size
FROM size AS s
LEFT JOIN (SELECT size_id,sum(weight) AS imports FROM import_size GROUP BY size_id) AS i ON s.id=i.size_id
LEFT JOIN (SELECT size_id,sum(weight) AS exports FROM export_size GROUP BY size_id) AS e ON s.id=e.size_id

关于mysql - MySql 查询的结果不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23030083/

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