更新,并在同一时间
问题描述:
检查我有表如下更新,并在同一时间
CatID| Total_Amount | Amount_paying |IsCompleted
-----|--------------|---------------|------------
CA01 | 2000 | 1700 | 0
在这个表我要检查是否TOTAL_AMOUNT和amount_paying是相同或不? 其中total_amount是固定的,且amount_paying将在每个插入语句后最大化。
所以如果我插入一条记录
CatID| Total_Amount | Amount_paying |IsCompleted
-----|--------------|---------------|------------
CA01 | 2000 | 1700 | 0
CA01 | 2000 | 300 | 1
在这里,我付300,所以TOTAL_AMOUNT = Amount_Paying和IsCompleted = 1
UPDATE tbl
SET is_completed = CASE WHEN SUM(amount_paying) = Total_Amount THEN 1 ELSE 0 END
WHERE tbl.branch_id [email protected] AND [email protected]
给An aggregate may not appear in the set list of an UPDATE statement.
答
如果数据库引擎允许UPDATE
声明中的相同目标表:
UPDATE tbl
SET IsCompleted = IF((SELECT SUM(Amount_paying) FROM tbl WHERE CatID = 'CA01') >= Total_Amount, 1, 0)
WHERE CatID = 'CA01';
但是,例如,使用MySQL,您将获得Query Error: Error: ER_UPDATE_TABLE_USED
。
所以,下面应该工作:
UPDATE tbl AS t
JOIN (
SELECT
CatID,
SUM(Amount_paying) AS totalAP
FROM tbl
WHERE CatID = 'CA01'
GROUP BY CatID
) AS t2 ON (t2.CatID = t.CatID)
SET t.IsCompleted = IF(t2.totalAP >= t.Total_Amount, 1, 0)
WHERE t.CatID = 'CA01';
这里是一个demo fiddle。
注意:在你自己的例子中,你试图设置is_completed
。根据你的表格,它应该是IsCompleted
。
您的意思是“如果总和(amount_paying)= 2000那么1 ELSE 0'? Yourr问题不清楚,如果插入另一行'SUM(amount_paying)'>> 2000 – Sami
sum(amount_paying)> 200?会发生什么?真假 – Babai