Mysql 奇怪的Sql更新行为
我正在尝试使用以下update语句更新PostgreSQL和MySQL上的供应商表: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 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