Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 奇怪的Sql更新行为_Mysql_Sql_Postgresql - Fatal编程技术网

Mysql 奇怪的Sql更新行为

Mysql 奇怪的Sql更新行为,mysql,sql,postgresql,Mysql,Sql,Postgresql,我正在尝试使用以下update语句更新PostgreSQL和MySQL上的供应商表: UPDATE SUPPLIERS SET CURDEBT = CURDEBT + 10 WHERE ID = 5 只要CURDEBT列不等于null,这就可以正常工作,如果为null,则不会更新记录。有任何机构能解决这个问题吗 谢谢使用合并 请参见SQL中的,NULL与0不是一回事。对空值的任何操作仍然会产生空结果。NULL+10仍然是NULL 如果希望NULL在此查询中自动变为0,请尝试以下PostgreS

我正在尝试使用以下update语句更新PostgreSQL和MySQL上的供应商表:

UPDATE SUPPLIERS SET CURDEBT = CURDEBT + 10 WHERE ID = 5
只要CURDEBT列不等于null,这就可以正常工作,如果为null,则不会更新记录。有任何机构能解决这个问题吗

谢谢

使用合并


请参见SQL中的

,NULL与0不是一回事。对空值的任何操作仍然会产生空结果。NULL+10仍然是NULL

如果希望NULL在此查询中自动变为0,请尝试以下PostgreSQL:

或MySQL:


您需要的是联合:

合并MySQL:

这种行为正是您应该从SQL中得到的,因为null+x=null总是存在的

您可以使用在postgres和mysql中都可用的COALESCE函数来解决此问题,如下所示:

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

您希望NULL+10的表现如何?NULL==undefinedis没有任何解决方法我在下面添加了我的答案-Coalesce。
UPDATE SUPPLIERS SET CURDEBT = coalesce(CURDEBT, 0) + 10 WHERE ID = 5
UPDATE SUPPLIERS SET CURDEBT = ifnull(CURDEBT, 0) + 10 WHERE ID = 5
UPDATE SUPPLIERS
SET CURDEBT = COALESCE(CURDEBT, 0) + 10
WHERE ID = 5
UPDATE SUPPLIERS SET CURDEBT = COALESCE(CURDEBT,0) + 10 WHERE ID = 5