2011-01-26 14 views
13

ho utilizzato uno SQL come questo per aggiornare un elenco di proprietà nel mio database:SQL UPDATE, ma solo se il vecchio valore è nullo

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

Ma io voglio aggiornare una proprietà con un nuovo valore SOLO se non ha già un valore nel database. Come lo posso fare?

+1

qual è il tuo RDBMS? –

+0

Sto usando Oracle. –

risposta

3

Se si utilizza 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 = ? 

Se non si utilizza Oracle, si prega di aggiornare domanda con RDBMS che si sta utilizzando, o per cercare un nvl come la funzione nel database.

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

Se si sta parlando di farlo su un campo per la base di campo nella riga:

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

In MS SQL qualcosa di simile (non valore supponendo che significa banca dati NULL) dovrebbe funzionare:

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

COALESCE() restituisce il primo valore non nullo dai suoi argomenti.

+1

@marc_s - COALESCE è ANSI SQL e deve essere supportato su tutti i sistemi RDBMS. ISNULL è una funzione specifica RDBMS. Dal momento che l'OP non menziona mai la piattaforma che stanno utilizzando, penso che COALESCE sia la risposta corretta. –

1

utilizzano combinazioni di "è nullo" o "non è nullo" nelle query, vale a dire

aggiornamento my_table SET A =? dove cliente =? e a è nullo

Naturalmente, questo funziona solo per le colonne in cui null è un valore legale. In realtà è difficile sapere esattamente quale query funzionerà per te senza conoscere i vincoli sulle varie colonne.

1

In MySQL, si potrebbe fare:

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

provare questo codice SQL nativo è un lavoro per me molto bene:

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

Aggiornamento solo NULL valore o vuoto.

Problemi correlati