Я пытаюсь обновить таблицу поставщиков как на PostgreSQL, так и на MySQL, используя следующий оператор обновления:
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
Используйте coalesce
UPDATE SUPPLIERS SET CURDEBT = coalesce(CURDEBT,0) + 10 WHERE ID = 5
См. sqlbook
То, что вы ищете, это 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
Это поведение именно то, что вы должны ожидать от SQL, так как null + x = null, всегда.
Вы можете решить эту проблему, используя функцию COALESCE, доступную как в postgres, так и в mysql, например:
UPDATE SUPPLIERS SET CURDEBT = COALESCE(CURDEBT,0) + 10 WHERE ID = 5