Mysql 用于从两个表更新余额的SQL
我需要帮助更新表中的余额列。使用update命令 客户_主数据中存在的余额列 客户\主数据>客户代码,余额 它需要根据两个表中的值进行更新 预订>客户代码,预订量 应收账款>客户代码,金额未经检查 对于customercode,余额为bookingamount-amountrecd 该命令将应用于mysql和postgresql中 它可以适用于单个客户,如(对于custcode='A1234XXXXX'),也可以适用于customer_master中的所有客户 我试过谷歌“从两个表更新余额”,但到目前为止运气不佳Mysql 用于从两个表更新余额的SQL,mysql,sql,postgresql,Mysql,Sql,Postgresql,我需要帮助更新表中的余额列。使用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上创建索引。我想知道完整性。