我有以下查询来更新我的付款表,以便将其设置为等于所有费用的总和减去客户数据库中所有付款和信用的总和。
只要收费,这就完美无缺,但是,如果第一个子查询等于零,它不会将payment.balance更新为负数,它只是保持为零。
有谁能告诉我如何解决这个问题或为什么会这样?
UPDATE customer
SET balance = (SELECT SUM(amount)
FROM payment
WHERE type = 'C'
AND custID = '10003')
- (SELECT SUM(amount)
FROM payment
WHERE (type = 'P' OR type = 'X')
AND custID = '10003')
WHERE custID = '10003';
简而言之,当第一个子查询(SELECT SUM(amount) FROM payment WHERE type = 'C' AND custID = '10003')
为0
时,更新始终会导致0
而不是0
减去第二个子查询。
思想?
答案 0 :(得分:4)
由于我无法看到您的实际数据库表列设置,我猜这个。
MySQL SUM()函数返回表达式的总和。当返回集没有行时,SUM()函数返回NULL。
使用if条件,以便在SUM()产生NULL的情况下将值返回为0,这样就不会有NULL - x或x - NULL或NULL - NULL。