我有3张桌子:商品,商店和照片.在第一个表中存储商品标题.在第二个 - 不同股票的货物余额,在第三个 - 商品图片的链接.所以商品与商店和照片有一对多的联系.现在,我需要通过一个查询获得具有库存休息和图片数量的商品列表.我是这样做的:
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`
Run Code Online (Sandbox Code Playgroud)
一切似乎都好,而好有0或1张图片.但是当它有2个 - 存储器双打时,我无法理解为什么.怎么了?
Mic*_*son 27
你的问题是,当你有两个(或更多)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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22407 次 |
| 最近记录: |