[英]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
記錄,但是size
和import_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.