Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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 用于从两个表更新余额的SQL_Mysql_Sql_Postgresql - Fatal编程技术网

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

Mysql 用于从两个表更新余额的SQL,mysql,sql,postgresql,Mysql,Sql,Postgresql,我需要帮助更新表中的余额列。使用update命令 客户_主数据中存在的余额列 客户\主数据>客户代码,余额 它需要根据两个表中的值进行更新 预订>客户代码,预订量 应收账款>客户代码,金额未经检查 对于customercode,余额为bookingamount-amountrecd 该命令将应用于mysql和postgresql中 它可以适用于单个客户,如(对于custcode='A1234XXXXX'),也可以适用于customer_master中的所有客户 我试过谷歌“从两个表更新余额”,但

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

客户_主数据中存在的余额列

客户\主数据>客户代码,余额

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

预订>客户代码,预订量

应收账款>客户代码,金额未经检查

对于customercode,余额为bookingamount-amountrecd

该命令将应用于mysql和postgresql中

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

我试过谷歌“从两个表更新余额”,但到目前为止运气不佳


感谢

MySQL,您可以连接多个表,即使它是一个
更新
语句。我使用了
LEFT JOIN
,因为有可能
custcode
应收账款
表中还没有记录

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能否包含有关
预订
应收款
的多条记录?如果是这样,我将更新答案。

对于MySQL,即使是
update
语句,也可以连接多个表。我使用了
LEFT JOIN
,因为有可能
custcode
应收账款
表中还没有记录

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能否包含有关
预订
应收款
的多条记录?如果是这样的话,我会更新答案。

我的观点(可能)有点过头了

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'
我的观点(可能)有点过头了

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'

+左连接为1!我还将根据cust代码对孩子进行分组和求和,以处理孩子中有多个金额的情况tables@PreetSangha我同意这就是为什么我问OP它是否有可能包含单个
custcode
的多个记录。heheTrue-但这样做是一种更安全、更通用的解决方案。谢谢,是的,在两个儿童表中都有多次出现custcode请参见@PreetSangha-answer。更新看起来是这样的。您需要有一个子查询来计算它的总值。左连接为+1!我还将根据cust代码对孩子进行分组和求和,以处理孩子中有多个金额的情况tables@PreetSangha我同意这就是为什么我问OP它是否有可能包含单个
custcode
的多个记录。heheTrue-但这样做是一种更安全、更通用的解决方案。谢谢,是的,在两个儿童表中都有多次出现custcode请参见@PreetSangha-answer。更新看起来是这样的。你需要有一个子查询来计算它的总价值。谢谢你,还有任何优化建议,更新索引需要一段时间。在这里,你的朋友们将在custcode上找到custcode和bookingamount上的索引bookings和custcode和bookingamount上的应收账款。这将使dube查询速度极快,然后您可以选择在master上创建索引。谢谢,还有任何关于优化的建议,更新索引需要一段时间,在custcode上会是你的朋友custcode和bookingamount上的索引bookings和custcode和bookingamount应收账款。这将使dube查询速度极快,然后您可以选择在master上创建索引。我想知道完整性。