有两个表,coating_out(发出表),coating_in(收入表),如图:
两个表中有一个共同的字段coatoutno,coatingout表中coatoutno是唯一的,coatingin(收入)表中coatoutno有重复的,现在需要在coatingin(收入)表中根据coatoutno的号码,把coatinqty(收入数量)列的数量相加,再用coatingout(发出)表中coatoutqty(发出数量)减去coatinqty的和,求出结果放在balance(余数)列中。
自己写的SQL语句如下:
运行结果应该是10000,实际是60000,如下图:
哪位大神看下错误在哪里?如何解决?谢谢!

解决方案 »

  1.   

    先GROUP SUM两表分别,然后再JOIN
      

  2.   


    版主你好!刚学mysql,具体要怎么写?能否写出来?谢谢!
      

  3.   

    select c.coatoutqty-b.coatinqtysum balance from coating_out c ,
    (select a.*,sum(coatinqty) coatinqtysum from coating_in a group by  a.coatoutno) b  where c.coatoutno =b.coatoutno
      

  4.   

    select a.coatoutqty-b.sumcoatinqty balance from coating_out a ,
    (select coatoutno,sum(coatinqty) sumcoatinqty 
    from coating_in 
    group by  coatoutno) b
    where a.coatoutno =b.coatoutno
    你运行的结果不对,是SQL语问因为产生笛卡尔积了,计算的是产生笛卡尔积结果集后的值。
    3楼写的SQL语句是对的,但不太严谨。
      

  5.   


    这个结果对了,但是写到PHP代码中在网页中运行就不行了,网页代码懂吗?怎么写?
      

  6.   


    这个结果对了,但是写到PHP代码中在网页中运行就不行了,网页代码懂吗?怎么写?
    不好意思,代码之类的就不懂了
      

  7.   

    select c.coatoutqty-b.coatinqtysum balance from coating_out c ,
    (select a.*,sum(coatinqty) coatinqtysum from coating_in a group by  a.coatoutno) b  where c.coatoutno =b.coatoutno
      

  8.   

    可以使用窗口函数,参考《如何协助MySQL实现窗口函数》这篇文章