2011-03-20 121 views
0

我尝试使用下面的更新语句都PostgreSQL和MySQL更新供应商表:奇怪的SQL UPDATE行为

UPDATE SUPPLIERS SET CURDEBT = CURDEBT + 10 WHERE ID = 5 

这只要CURDEBT列不等于空工作正常,如果是空它不会更新记录。任何机构都有解决这个问题的办法吗?

感谢

+2

你怎么会想到NULL + 10表现? (NULL == undefined) – Jaymz 2011-03-20 19:37:04

+0

有没有解决这个问题的方法 – 2011-03-20 19:38:10

+0

我在下面添加了我的答案 - 合并。 – Jaymz 2011-03-20 19:40:17

回答

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 
+0

很好的解释谢谢 – 2011-03-20 19:49:04

6

使用​​3210

UPDATE SUPPLIERS SET CURDEBT = coalesce(CURDEBT,0) + 10 WHERE ID = 5 

sqlbook

3

这种行为正是你应该期望什么从SQL,因为空+ X = NULL,始终。

您可以通过使用COALESCE函数解决这个问题,在这两个的Postgres和MySQL提供,像这样:

UPDATE SUPPLIERS SET CURDEBT = COALESCE(CURDEBT,0) + 10 WHERE ID = 5