MySQL:使用两个表的总和更新值
我有一张这样的桌子 负债:MySQL:使用两个表的总和更新值,mysql,sql,Mysql,Sql,我有一张这样的桌子 负债: Id | CustomerId | liabilities --------------------------- 9 90 1000 ... Id | CustomerId | Payment --------------------------- 3 90 2500 4 91 1000 ... Id | balance --------------------------- 90
Id | CustomerId | liabilities
---------------------------
9 90 1000
...
Id | CustomerId | Payment
---------------------------
3 90 2500
4 91 1000
...
Id | balance
---------------------------
90 1500
91 1000
...
付款:
Id | CustomerId | liabilities
---------------------------
9 90 1000
...
Id | CustomerId | Payment
---------------------------
3 90 2500
4 91 1000
...
Id | balance
---------------------------
90 1500
91 1000
...
客户:
Id | CustomerId | liabilities
---------------------------
9 90 1000
...
Id | CustomerId | Payment
---------------------------
3 90 2500
4 91 1000
...
Id | balance
---------------------------
90 1500
91 1000
...
如您所见,客户的余额是其所有付款的总和减去其所有负债的总和。什么是更新余额的SQL查询?您可以使用
update
语句对包含付款
和负债
合计的派生表执行左联接
操作:
UPDATE Customer AS c
LEFT JOIN (
SELECT CustomerId, SUM(Payment) AS TotalPayment
FROM Payments
GROUP BY CustomerId
) AS p ON c.Id = p.CustomerId
LEFT JOIN (
SELECT CustomerId, SUM(liabilities) AS TotalLiabilities
FROM Liabilities
GROUP BY CustomerId
) AS l ON c.Id = l.CustomerId
SET balance = COALESCE(TotalPayment, 0) - COALESCE(TotalLiabilities, 0)
或者,您可以在UPDATE
语句中使用相关子查询:
UPDATE Customer AS c
SET balance = COALESCE((SELECT SUM(Payment)
FROM Payments
WHERE CustomerId = c.Id) , 0)
-
COALESCE((SELECT SUM(liabilities)
FROM Liabilities
WHERE CustomerId = c.Id) , 0)
您可以使用
UPDATE
语句对包含付款
和负债
合计的派生表执行左联接
操作:
UPDATE Customer AS c
LEFT JOIN (
SELECT CustomerId, SUM(Payment) AS TotalPayment
FROM Payments
GROUP BY CustomerId
) AS p ON c.Id = p.CustomerId
LEFT JOIN (
SELECT CustomerId, SUM(liabilities) AS TotalLiabilities
FROM Liabilities
GROUP BY CustomerId
) AS l ON c.Id = l.CustomerId
SET balance = COALESCE(TotalPayment, 0) - COALESCE(TotalLiabilities, 0)
或者,您可以在UPDATE
语句中使用相关子查询:
UPDATE Customer AS c
SET balance = COALESCE((SELECT SUM(Payment)
FROM Payments
WHERE CustomerId = c.Id) , 0)
-
COALESCE((SELECT SUM(liabilities)
FROM Liabilities
WHERE CustomerId = c.Id) , 0)
你可以考虑安排的事件,这里有更多的信息:这是一个很好的观点。但在这一点上,我其实只是想得到一个查询,将做更新。。。然后,事件是个好主意。你可以考虑安排的事件,这里有更多的信息:这是一个很好的观点。但在这一点上,我其实只是想得到一个查询,将做更新。。。那么这些活动就是一个好主意。