【发布时间】:2014-03-19 17:08:17
【问题描述】:
我这里有这 3 张桌子:
producttbl:
p_id p_name price
ANK001 ANKLET 200
BRC001 BRACELET 100
stocks_add:
p_id qty
ANK001 200
ANK001 50
stocks_rel:
p_id qty
ANK001 20
我在这里有这段代码(虽然我添加了一些代码,但@Bohemian 建议使用它):
Select p.p_id, p.p_name, p.price,
`coalesce((SELECT sum(a.qty)
FROM stocks_add a GROUP BY a.p_id),0)
-coalesce((SELECT sum(r.qty)
FROM stocks_rel r GROUP BY r.p_id),0)
as stock_on_hand
from productstbl p
left join stocks_add a
on a.p_id=p.p_id
left join stocks_rel r
on r.p_id=p.p_id
GROUP BY p.p_id`
当我执行它时,结果如下:
p_id p_name price stock_on_hand
ANK001 Anklet 200 230
BRC001 Bracelet 75 230
我正在尝试从第二张和第三张桌子上获取手头的库存。 并将其与产品表链接。
假设是,230应该只有ANK001。所需的输出应该是这个:
`p_id p_name price stock_on_hand
ANK001 Anklet 200 230
BRC001 Bracelet 75 0
`
但是第一个输出的结果正好相反。 :( 代码有什么问题?请帮帮我。
【问题讨论】:
-
最好创建一个重现问题的 sqlfiddle。对于我回答的每个 SQL 问题,我都必须这样做。此外,请在表的命名上保持一致 - 在读取查询时必须在 STOCKS_RELEASED 和
stocks_rel之间进行转换不是很有用! -
我已经编辑了我犯的错误。当然。我会。我会尽力。 :)
-
感谢您的修复 - 可以为我节省几分钟构建小提琴的时间(我必须在其中进行一些手动更改,但没什么大不了的)。 SQLFiddle 真的很不错,我建议你在合适的时候尝试一下 - 并确保使用完全震撼的“Text to DDL”按钮!
标签: mysql sql select left-join coalesce