我有两个mysql表
付款表如下
id invoiceID type amount date
1 0001 cash 1.00 2018-10-16
2 0001 cash 2.00 2018-10-16
3 0001 cash 1.00 2018-10-17
4 0001 cash 1.00 2018-10-17
5 0002 cash 5.00 2018-10-17
钱表
id type amount date
1 CASH 10.00 2018-10-16
2 CARD 20.00 2018-10-16
3 CASH 18.00 2018-10-17
4 CARD 90.00 2018-10-17
通过在付款表中使用InvoiceID
2。从类型为现金和日期2018-10-16的货币表中减去3(总金额)(将在货币类型为2018-10-16的货币表中获得现金7)
3。从现金表中键入现金和日期2018-10-17的金额中减去2(总金额)。(将在2018-10-17的现金表中获得现金16)
预期产量应该
钱表
id type amount date
1 CASH 7.00 2018-10-16
2 CARD 20.00 2018-10-16
3 CASH 16.00 2018-10-17
4 CARD 90.00 2018-10-17
我只有发票ID。首先要求从付款表中查找现金的添加日期均属于特定的发票ID(0001),例如2018-10-16和2018-10-17
答案 0 :(得分:0)
invoiceID = '0001'
和type
的每种组合确定date
的总额。为此,我们在Group By
和type
上使用date
,然后使用SUM()
函数确定总金额。Left Join
和money
上,从date
表到先前确定的派生表执行type
。Coalesce()
函数将其视为0。尝试以下操作(似乎是you want to Update the table):
UPDATE
money AS m
LEFT JOIN
(
SELECT
type,
SUM(amount) AS total_amount,
date
FROM payment
WHERE invoiceID = '0001'
GROUP BY type, date
) AS dt
ON dt.type = m.type AND
dt.date = m.date
SET m.amount = m.amount - COALESCE(dt.total_amount, 0)