Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql查询的结果不准确_Mysql_Sql - Fatal编程技术网

MySql查询的结果不准确

MySql查询的结果不准确,mysql,sql,Mysql,Sql,我有两个表(导入大小、导出大小)都包含这两列(大小id、重量) 现在我试图得到每个表中每个大小的权重之和,我的查询如下所示 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 GRO

我有两个表(导入大小、导出大小)都包含这两列(大小id、重量) 现在我试图得到每个表中每个大小的权重之和,我的查询如下所示

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
比如说,在尺寸1的导入尺寸表中,我们只有一条记录,但对于相同尺寸的导出尺寸表,我们有两条记录,导入尺寸产生的权重之和乘以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行
  • 导入大小
    :1行
  • 导出大小
    :2行
这给了我们1*1*2=2个排列,这意味着我们得到了2行。显然,每一个都包含不同的
export\u size
记录,但是
size
import\u size
呢?这两行使用来自这两行的相同记录。这意味着,
import\u size.weight
会出现两次,这就是为什么它会被加两次

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

解决方案:分别对每个表进行聚合,然后进行连接(未测试):


您能从表中发布一些条目吗?正如您所说的,import_size乘以2,如何?sqlfiddle可能会有所帮助。例如,导入表有1条记录:大小1权重2导出表有2条记录:大小1权重2和大小1权重3现在查询结果是:导入4导出5大小1我认为您必须使用简单的数据集来布局问题中的表。您希望查询结果为7吗?@Mazen,您希望得到什么结果?
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