Странное поведение Sql Update

0

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

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

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

Спасибо

  • 2
    Как бы вы ожидали, что NULL + 10 будет вести себя? (NULL == не определено)
  • 0
    есть ли обходной путь для этого
Показать ещё 1 комментарий
Теги:

4 ответа

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
    Хорошее объяснение спасибо
6

Используйте coalesce

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

См. sqlbook

5

То, что вы ищете, это 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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню