我正在尝试使用以下更新语句更新PostgreSQL和MySQL上的供应商表:
UPDATE SUPPLIERS SET CURDEBT = CURDEBT + 10 WHERE ID = 5
只要CURDEBT
列不等于null,这就可以正常工作,如果它为null,则不会更新记录。有没有人能解决这个问题?
由于
答案 0 :(得分:6)
答案 1 :(得分:6)
在SQL中,NULL与0不同。对NULL值的任何操作仍会产生NULL结果。 NULL + 10仍为NULL。
如果您希望NULL在此查询中自动变为“0”,请尝试此操作( PostgreSQL ):
UPDATE SUPPLIERS SET CURDEBT = coalesce(CURDEBT, 0) + 10 WHERE ID = 5
或 MySQL :
UPDATE SUPPLIERS SET CURDEBT = ifnull(CURDEBT, 0) + 10 WHERE ID = 5
答案 2 :(得分:5)
您要找的是COALESCE
:
UPDATE SUPPLIERS
SET CURDEBT = COALESCE(CURDEBT, 0) + 10
WHERE ID = 5
Coalesce(MySQL):
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce
答案 3 :(得分:3)
这种行为正是你应该从SQL中得到的,因为null + x = null,总是如此。
您可以使用postgres和mysql中提供的COALESCE函数来解决它,如下所示:
UPDATE SUPPLIERS SET CURDEBT = COALESCE(CURDEBT,0) + 10 WHERE ID = 5