簡體   English   中英

MySql查詢結果不正確

[英]Inaccurate results with MySql query

我有2個表(import_size,export_size)都包含這2列(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,這些表具有:

  • size :1行
  • import_size :1行
  • export_size :2行

這給我們1 * 1 * 2 = 2個排列,這意味着我們得到2行。 顯然每個包含一個不同的export_size記錄,但是sizeimport_size呢? 兩行使用來自兩者的相同記錄。 這意味着import_size.weight出現兩次 -這就是為什么將其相加兩次的原因。

順便說一句-如果兩個表都有2個大小為1的條目,您將得到4個排列,並且導入和導出大小都將加倍。

解決方案:對每個表分別進行聚合,然后進行聯接(未測試):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM