2010-09-19 2 views
1

J'essaie de faire une mise à jour SQL où je veux définir la valeur de la colonne en cours de mise à jour en fonction de la valeur d'une seconde table. Le script ci-dessous montre ce que j'essaie de faire, mais jusqu'à présent, je n'ai pas trouvé la bonne syntaxe.Mise à jour à l'aide de casse et sélection depuis une table différente

update sometable set name = 
    case 
    when (select newid from lookuptable where oldid = name) <> null then newid 
    else name 
    end 

Répondre

3
UPDATE T 
SET 
    T.name = L.newid 
FROM sometable T 
INNER JOIN lookuptable L 
    ON L.oldid = T.name 

Il n'y a pas besoin d'un soudent ou une jointure externe, parce que vous êtes uniquement intéressé à mettre à jour les lignes correspondant.

En outre, lorsque l'on compare une valeur null, vous devez toujours utiliser X IS NULL ou X IS NOT NULL plutôt que X = NULL ou X <> NULL, parce que l'égalité (et inégalité) les opérateurs renvoient toujours faux pour les valeurs nulles.