我有 3 张 table :商品、商店和图片。在第一个表中存储商品名称。在第二个 - 不同库存中的商品余额,在第三个 - 链接到商品图片。因此商品与商店和图片具有一对多的联系。 现在,我需要通过一次查询来获取包含库存总和和图片数量的商品 list 。 我是这样做的:
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`
一切似乎都很好,而好的有 0 或 1 张图片。但是当它有 2 - storerest doubles 时,我不明白为什么。 怎么了?
最佳答案
您的问题是,当您有两个(或更多)store
行和两个(或更多)pics
行用于单个 goods
行,您最终得到所有行组合的乘积。
要解决此问题,请在加入之前进行聚合:
SELECT
good.id,
good.title,
IFNULL(s.storerest, 0) AS storerest,
IFNULL(p.picscount, 0) AS picscount
FROM goods
LEFT JOIN (
SELECT goodid, sum(rest) AS storerest
FROM store
GROUP BY goodid
) s ON (goods.id = s.goodid)
LEFT JOIN (
SELECT goodid, count(id) AS picscount
FROM pics
GROUP BY goodid
) p ON (goods.id = p.goodid)
关于mysql - 左连接、求和和计数组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14967160/