我有三个表:商品、商店和图片。第一个表中存储了商品的标题。第二个表中存储了不同库存中商品的余额,第三个表中存储了指向商品图片的链接。因此,商品与商店和图片之间存在一对多的关系。 现在,我需要通过一个查询获取商品列表,并计算库存余额总和和图片数量。 我是这样做的:
SELECT good.id, good.title, sum(store.rest) AS storerest, count(pics.id) AS picscount
FROM goods
LEFT JOIN store ON (goods.id = store.goodid)
LEFT JOIN pics ON (goods.id = pics.goodid)
GROUP BY goods.id`
当good有0或1张图片时一切都看起来正常。但是当它有2个——存储空间翻倍时,我就无法理解为什么会这样。出了什么问题?
pics
中,特定的pics
.goodid
(行)存在多个行,则看起来MySQL会为每个pics
.goodid
行创建附加虚拟行。并插入来自goods
和store
表的值,其中pics
.goodid
=store
.goodid
=goods
.id
。并且使用sum(store.rest)
简单地汇总所有行(包括虚假行)。这里有一个示例http://sqlfiddle.com/#!9/0caa01/1可以帮助理解发生了什么。对我来说不太容易理解... - user2360831