Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 当我在父表中加入结果时,它会影响一个不应该受影响的项_Mysql_Sql_Select_Left Join_Coalesce - Fatal编程技术网

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