Странное поведение Sql Update - PullRequest
0 голосов
/ 20 марта 2011

Я пытаюсь обновить таблицу поставщиков на PostgreSQL и MySQL, используя следующую инструкцию обновления:

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

Это работает нормально, если столбец CURDEBT не равен нулю, если он равен нулюэто не будет обновлять запись.У кого-нибудь есть решение этой проблемы?

Спасибо

Ответы [ 4 ]

6 голосов
/ 20 марта 2011

В 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
6 голосов
/ 20 марта 2011

Использование coalesce

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

См. sqlbook

5 голосов
/ 20 марта 2011

То, что вы ищете, это 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 голосов
/ 20 марта 2011

Такое поведение именно то, что вы должны ожидать от SQL, так как null + x = null, всегда.

Вы можете решить эту проблему, используя функцию COALESCE, доступную как в postgres, так и в mysql, например:

UPDATE SUPPLIERS SET CURDEBT = COALESCE(CURDEBT,0) + 10 WHERE ID = 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...