Mysql 当我在父表中加入结果时,它会影响一个不应该受影响的项
我这里有三张桌子:Mysql 当我在父表中加入结果时,它会影响一个不应该受影响的项,mysql,sql,select,left-join,coalesce,Mysql,Sql,Select,Left Join,Coalesce,我这里有三张桌子: producttbl: p_id p_name price ANK001 ANKLET 200 BRC001 BRACELET 100 stocks_add: p_id qty ANK001 200 ANK001 50 stocks_rel: p_
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建议的,不过我添加了一些):
当我执行它时,结果是:
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
`
但是第一个输出的结果告诉我们另一种情况:(
代码有什么问题?请帮助我。我不确定您的查询有什么问题,但以下是我最容易编写的代码:
select p.*, IFNULL(aqty,0) - IFNULL(rqty,0) AS stock_on_hand
from productstbl p
left join (
select p_id, SUM(IFNULL(a.qty,0)) as aqty
from stocks_add a
group by p_id
) AS asum
on asum.p_id = p.p_id
left join
(
select p_id, SUM(IFNULL(r.qty,0)) as rqty
from stocks_rel r
group by p_id
) AS rsum
on rsum.p_id = p.p_id;
它实际上给出了正确的结果!这对于查询来说是一件好事:)
最好创建一个SQLFIDLE来重现您的问题。对于我回答的每个SQL问题,我都必须这样做。此外,请在表的命名上保持一致-阅读查询时,必须在已发布的股票和
STOCKS\u rel
之间进行转换,这不是很有用!我已经编辑了我犯的错误。。当然可以我会的。我试试看。:)感谢您的修复-本可以节省我制作小提琴的几分钟(在这期间我必须进行一些手动更改,但没什么大不了的)。SQLFiddle真的很不错,我建议您在合适的时候试用它——并且确保使用“文本到DDL”按钮,它完全可以启动!嗨,丹·法雷尔!是的,它确实给出了正确的结果。:)我很难思考是什么导致了我第一次输出的错误。。无论如何,如果可以的话,我想使用您评论的代码。:)
select p.*, IFNULL(aqty,0) - IFNULL(rqty,0) AS stock_on_hand
from productstbl p
left join (
select p_id, SUM(IFNULL(a.qty,0)) as aqty
from stocks_add a
group by p_id
) AS asum
on asum.p_id = p.p_id
left join
(
select p_id, SUM(IFNULL(r.qty,0)) as rqty
from stocks_rel r
group by p_id
) AS rsum
on rsum.p_id = p.p_id;
P_ID P_NAME PRICE STOCK_ON_HAND
ANK001 ANKLET 200 230
BRC001 BRACELET 100 0