我尝试使用下面的更新语句都PostgreSQL和MySQL更新供应商表:奇怪的SQL UPDATE行为
UPDATE SUPPLIERS SET CURDEBT = CURDEBT + 10 WHERE ID = 5
这只要CURDEBT
列不等于空工作正常,如果是空它不会更新记录。任何机构都有解决这个问题的办法吗?
感谢
我尝试使用下面的更新语句都PostgreSQL和MySQL更新供应商表:奇怪的SQL UPDATE行为
UPDATE SUPPLIERS SET CURDEBT = CURDEBT + 10 WHERE ID = 5
这只要CURDEBT
列不等于空工作正常,如果是空它不会更新记录。任何机构都有解决这个问题的办法吗?
感谢
在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
很好的解释谢谢 – 2011-03-20 19:49:04
你是什么寻找是COALESCE
:
UPDATE SUPPLIERS
SET CURDEBT = COALESCE(CURDEBT, 0) + 10
WHERE ID = 5
合并(MySQL的):
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce
这种行为正是你应该期望什么从SQL,因为空+ X = NULL,始终。
您可以通过使用COALESCE函数解决这个问题,在这两个的Postgres和MySQL提供,像这样:
UPDATE SUPPLIERS SET CURDEBT = COALESCE(CURDEBT,0) + 10 WHERE ID = 5
你怎么会想到NULL + 10表现? (NULL == undefined) – Jaymz 2011-03-20 19:37:04
有没有解决这个问题的方法 – 2011-03-20 19:38:10
我在下面添加了我的答案 - 合并。 – Jaymz 2011-03-20 19:40:17