代码之家  ›  专栏  ›  技术社区  ›  DigiLive

使用中间表用相关表的总和更新一个表的值

  •  0
  • DigiLive  · 技术社区  · 6 年前

    我有三张桌子A,A,B和B。
    由于mySQL不支持多对多关系,表A和B通过中间表A\u B相互关联。

    Table A:    Table A_B:  Table B:
    aId aCount  aId bId     bId bCo
    1   10      1   1       1   4
    2   15      1   2       2   5
    3   20      2   1       3   6
                3   2       4   7
                3   4
    


    期望结果:

    Table A:    Remark:
    aId aCount  (Current aCount + all related bCounts)
    1   19      (10 + 4 + 5)
    2   19      (15 + 4)
    3   32      (20 + 5 + 7)
    

    我的mySQL知识太基础了。
    我可以创建一个SELECT查询,它会给我一个结果表,就像我希望更新后的表一样,但是我不能创建update语句。我所做的一切都会导致语法错误或不希望的结果。
    预期结果如下所示:

    SELECT `aId`, aCount + SUM(`bCount`) as `aCount` from `A`
    INNER JOIN `A_B` ON `A_B`.`aId` =   `A`.`aId`
    INNER JOIN `B`   ON   `B`.`bId` = `A_B`.`bId`
    GROUP BY `aId`;
    

    像我想要的那样的更新是否可以通过一个查询实现,还是需要多个查询(性能方面)?

    1 回复  |  直到 6 年前
        1
  •  0
  •   DigiLive    6 年前

    请尝试以下操作: https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=0b6a287d41eed001710e94612c4228ba

    select x.id,x.val,sum(tableb.val)+x.val as vals from 
    (select * from tablea inner join tableab on tablea.id=tableab.id1) x inner join
    tableb on x.id2=tableb.id 
    group by x.id,x.val,id1
    

    id  val vals
    1   10  19
    2   15  19
    3   20  32
    

    更新表格:

    UPDATE tablea INNER JOIN
    (SELECT x.id, x.val, SUM(tableb.val) + x.val as vals FROM
        (SELECT * FROM tablea INNER JOIN tableab ON tablea.id = tableab.id1) x INNER JOIN
        tableb ON x.id2 = tableb.id 
        GROUP BY x.id, x.val, id1)Z ON tablea.id=Z.id 
    SET tablea.val = Z.vals;