SQL UPDATE, но только если старое значение равно null

Я использовал такой sql, чтобы обновить список свойств в моей базе данных:

update my_table set a = ?, b = ?, c = ?, d = ?,  where customer = ?

Но я хочу обновить свойство с новым значением ТОЛЬКО, если он уже не имеет значения в базе данных. Как я могу это сделать?

Ответ 1

В MS SQL что-то вроде этого (при условии, что значение value означает базу данных NULL) должно работать:

update 
  my_table 
set 
  a = COALESCE(a, ?), 
  b = COALESCE(b, ?), 
  c = COALESCE(c, ?), 
  d = COALESCE(d, ?)
where 
  customer = ?

COALESCE() возвращает первое ненулевое значение из своих аргументов.

Ответ 2

Если вы используете oracle:

update my_table 
   set a = nvl(a, new_a_value),
       b = nvl(b, new_b_value),
       c = nvl(c, new_c_value),
       d = nvl(d, new_d_value),
 where customer = ?

Если вы не используете Oracle, пожалуйста, обновите вопрос с помощью RDBMS, которую вы используете, или найдите функцию nvl как таковой в вашей базе данных.

Ответ 3

Если вы говорите об этом в поле в поле в строке:

update my_table
set a = coalesce(a, ?),
    b = coalesce(b, ?),
    c = coalesce(c, ?)
where customer = ?

Ответ 4

update YourTable
    set a = coalesce(a, NewValueA),
        b = coalesce(b, NewValueB),
        ...
    where customer = ?

Ответ 5

В ваших запросах используйте комбинации "null" или "is not null", т.е.

обновить my_table set a =? где customer =? и a имеет значение null

Конечно, это работает только для столбцов, где null - это юридическое значение. На самом деле трудно точно знать, какой запрос будет работать для вас, не зная ограничений на различные столбцы.

Ответ 6

В MySQL вы можете сделать:

UPDATE my_table 
SET
a = IFNULL(a, ?),
b = IFNULL(b, ?),
c = IFNULL(c, ?),
d = IFNULL(d, ?)
where customer = ?

Ответ 7

Попробуйте этот код SQL, он работает для меня очень хорошо:

UPDATE table 
SET field = 'NO'
WHERE field 
IS NULL
OR field = ''

Обновить только значение NULL или пустое.