用于两个表的更新余额的SQL

时间:2012-10-20 05:47:42

标签: mysql sql postgresql

我需要帮助更新表格中的余额列。使用更新命令

customer_master中的余额列

  

customer_master> custcode,平衡

需要根据两个表中的值进行更新

  

预订> custcode,bookingamount

     

应收账款> custcode,amountrecd

对于客户代码,余额为bookingamount - amountrecd

该命令将应用于mysql和postgresql。

它可以针对单个客户(例如custcode ='A1234XXXXX'),也可以应用于customer_master中的所有客户。

我尝试了谷歌“从两张桌子上更新余额”但到目前为止没有运气。

感谢

2 个答案:

答案 0 :(得分:2)

对于MySQL,即使它是UPDATE语句,也可以连接多个表。我使用了LEFT JOIN,因为有custcodereceivables表上还没有记录的可能性。

UPDATE  customer_master a
        LEFT JOIN bookings b
            ON a.custcode = b.custcode
        LEFT JOIN receivables c
            ON a.custcode = c.costcode
SET     a.balance = COALESCE(b.bookingamount, 0) - COALESCE(c.amountrecd, 0) 
-- WHERE a.custcode = 'A1234XXXXX'

后续问题:custcode是否可以在bookingsreceivables上包含多条记录?如果是这样,我会更新答案。

答案 1 :(得分:1)

我的拍摄(可能)在顶部腰带和牙箍上

UPDATE  customer_master a
        LEFT JOIN (select custcode, sum(COALESCE(bookingamount, 0)) AS bookingamount 
                   from bookings group by custcode) b
            ON a.custcode = b.custcode
        LEFT JOIN (select custcode, sum(COALESCE(amountrecd, 0)) AS amountrecd 
                   from receivables group by custcode) c
            ON a.custcode = c.custcode
SET     
         a.balance = COALESCE(b.bookingamount, 0) - COALESCE(c.amountrecd, 0) 
-- WHERE a.custcode = 'A1234XXXXX'