2011-01-26 2 views
13

J'utilise un sql comme celui-ci de mettre à jour une liste des propriétés dans ma base de données:SQL UPDATE, mais seulement si l'ancienne valeur est nulle

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

Mais je veux mettre à jour une propriété avec une nouvelle valeur SEULEMENT si elle n'a pas déjà une valeur dans la base de données. Comment puis je faire ça?

+1

quel est votre SGBDR? –

+0

Im utilisant Oracle. –

Répondre

3

Si vous utilisez 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 = ? 

Si vous n'utilisez Oracle, s'il vous plaît mettre à jour question SGBDR que vous utilisez, ou la recherche d'un nvl comme fonction dans votre base de données.

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

Si vous parlez le faire sur un terrain par base sur le terrain dans la ligne:

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

Dans MS SQL quelque chose comme ceci (en supposant la valeur non signifie base de données NULL) devrait fonctionner:

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

COALESCE() renvoie la première valeur non nulle à partir de ses arguments.

+1

@marc_s - COALESCE est ANSI SQL et devrait être pris en charge sur tous les systèmes de SGBDR. ISNULL est une fonction spécifique au SGBDR. Puisque l'OP ne mentionne jamais quelle plate-forme ils utilisent, je pense que COALESCE est la bonne réponse. –

1

Utilisez des combinaisons de « est nul » ou «n'est pas nul » dans vos requêtes, à savoir

mise à jour my_table mis a =? où le client =? et a est nul

Bien sûr, cela ne fonctionne que pour les colonnes où null est une valeur légale. Il est en fait difficile de savoir exactement quelle requête fonctionnera pour vous sans connaître les contraintes sur les différentes colonnes.

1

MySQL, vous pouvez faire:

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

Essayez ce code SQL natif c'est un travail pour moi très bien:

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

mise à jour juste valeur NULL ou vide.

Questions connexes