Vérifiez s'il existe au sein de SQL CAS de déclaration
Je suis en train de mettre à jour une colonne dans le tableau a
basée sur le fait qu'une autre colonne de la table est dans un ensemble de résultats à partir de la table b
. Actuellement variations sur:
update a
set a.field1 =
case
when exists (
select b.field2
from b
where b.field2 = a.field2
)
then 'FOO'
else 'BAR'
end
ne sont pas en cours d'exécution. Des idées comment faire pour une base de données DB2?
Modifier: Merci pour vos réponses, mieux que je puisse faire est
update a set field1 = 'FOO' where field2 in (select field2 from b);
update a set field1 = 'BAR' where field2 not in (select field2 from b);
Mais je vais laisser cette ouvert au cas où quelqu'un peut trouver une version du code qui fonctionne.
OriginalL'auteur nearly_lunchtime | 2009-02-19
Vous devez vous connecter pour publier un commentaire.
Je travaille sur une base de données DB2 for iSeries boîte. Essayez ceci:
Coalesce()
est une fonction qui retourne le premier non NUL dans la liste.OriginalL'auteur Lynette Duffy
Cela fonctionne dans SQLServer. Peut-être DB2 a une construction similaire.
Ce qui concerne,
Lieven
Cela devrait résoudre le problème.
Que va faire l'affaire. Vous pouvez toujours le mettre dans une instruction de mise à jour avec une instruction de CAS, la vérification de valeurs Null dans le PK de la table B, mais il peut aussi y avoir des avantages à le faire en deux étapes et ce que vous avez maintenant élimine les doublons de mises à jour.
Mon instinct me dit que les deux mises à jour pourrait être plus rapide que l'utilisation d'un cas dans une mise à jour.
La syntaxe ne semble pas fonctionner dans DB2, mais vous avez raison dans l'esprit de le faire juste en deux pistes séparées est plus clair.
OriginalL'auteur Lieven Keersmaekers
La première occurence d'un.champ1 devrait être un.champ2.
Vous avez dit "si une autre colonne de la table est dans un ensemble..."
Votre code, c'est de modifier la même colonne, pas une colonne différente.
OriginalL'auteur Walter Mitty
Je ne suis pas un expert en SQL ou DB2 mais peut-être que vous pouvez joindre deux tables et vérifier wheither b.champ1 est null?
OriginalL'auteur