Vous constatez qu'une erreur dans un système a incorrectement nommé les hommes (M) en tant que femmes (W) et vice versa dans la base de données. Les colonnes ne permettent qu'un seul caractère. Sans utiliser de tables temporaires, écrivez une requête de mise à jour pour résoudre ce problème.
Cette question a été posée lors d'une récente interview que j'ai eue, et j'entre dans d'autres interviews qui peuvent avoir des questions similaires, donc je voulais avoir une idée de la façon de gérer cela.
Réponses:
Vous souhaitez utiliser une
CASE
expression d'un certain type.Dans SQL Server, le code ressemblerait à ceci:
Edit: Comme indiqué dans les commentaires (et certaines des autres réponses), ELSE n'est pas nécessaire si vous mettez une clause WHERE sur la déclaration.
Cela évite les mises à jour inutiles. La chose importante dans les deux cas est de se rappeler qu'il existe des options autres que M&W (NULL par exemple) et que vous ne voulez pas mettre des informations erronées. Par exemple:
Cela remplacerait tout NULL (ou tout autre sexe possible) par «M», ce qui serait incorrect.
Quelques autres options seraient
Et un plus concis
la source
IIF()
parIF()
et cela fonctionnerait dans MySQL;)Dans Oracle, vous pouvez utiliser un CASE comme les autres réponses ont:
Vous pouvez également utiliser un DECODE:
la source
Pour basculer entre seulement deux valeurs, vous pouvez également essayer cette astuce, qui n'utilise pas d'
CASE
expression (en supposant Transact-SQL ici):En fonction de la valeur actuelle de
Gender
,ASCII(Gender)
annulera l'unASCII('M')
ouASCII('W')
l'autre, laissant l'autre code être transformé par laCHAR()
fonction en retour au caractère correspondant.Je laisse cela juste pour comparaison, cependant. Bien que cette option puisse avoir une apparence d'élégance, une solution utilisant une
CASE
expression serait sans doute plus lisible et donc plus facile à maintenir, et il serait certainement plus facile de l'étendre à plus de deux valeurs.la source
M
etW
ont été saisis en majuscules pour éviter que des résultats inattendus7
ou `-` n'apparaissent.ASCII(Gender)
parASCII(UPPER(Gender))
, ce qui est moins élégant, mais pas beaucoup.WHERE
clause?Vous pouvez le faire avec une
case ... when
expression:la source
J'utiliserais une mise à jour avec une
case
expression.la source
Vous pouvez effectuer cette mise à jour à l'aide d'une
case
expression.Je suggère d'exécuter votre déclaration de mise à jour dans une transaction et d'ajouter une requête simple telle que:
afin de vérifier les résultats que vous obtiendrez. Effectuer la transaction avec un rollback et la passer à un commit lorsque vos résultats correspondent à ce que vous attendez.
la source