MySQL CAS de mise à jour de plusieurs colonnes
Je voudrais mettre à jour plusieurs colonnes dans ma table à l'aide d'une instruction du cas, mais je ne trouve pas comment faire (est-ce même possible). Je suis venu avec les suivants en référence non valide requête:
UPDATE tablename SET
CASE name
WHEN 'name1' THEN col1=5,col2=''
WHEN 'name2' THEN col1=3,col2='whatever'
ELSE col1=0,col2=''
END;
Est-il possible d'atteindre le résultat attendu avec SQL valide?
- Double Possible: stackoverflow.com/questions/8358642/...
- Pas vraiment, c'est une instruction de mise à jour, pas d'en sélectionner un.
- Double de stackoverflow.com/q/3432/1553851
- Encore une fois, pas vraiment. C'est une instruction de mise à jour, pas un cache un.
- Vous avez demandé s'il y avait de toute façon de réaliser la même chose en SQL valide. La réponse est oui, à l'aide d'une instruction insert. Notez que le lié question est également de savoir comment combiner les mises à jour.
- Ce n'est pas la même chose si il insère des enregistrements au lieu de seulement la mise à jour des enregistrements existants. La accepté de répondre à la question liée est une insertion alors que j'ai été explicitement la recherche d'une mise à JOUR seule réponse. La question liée, en effet, veut aussi une mise à JOUR de réponse, mais a un INSERT réponse acceptée. Je ne sais pas pourquoi cela est arrivé, mais il ne serait pas répondre à cette question.
- Parce qu'il n'a pas d'insérer des enregistrements si il y a des valeurs en double pour une clé unique. - Je le prendre il n'y a pas de clé unique sur
name
? - Il n'y a pas, et je ne connaissais pas l'Id à l'avance.
Vous devez vous connecter pour publier un commentaire.
Je ne connais pas de moyen propre de faire ce que vous demandez. Un équivalent SQL valide mise à jour:
Bien sûr, ce n'est pas assez et qui exige de répéter le même cas (par exemple
'name1'
) plusieurs fois, mais je ne pense pas que c'est possible de toute autre manière.Si
name
a un index unique et que vos valeurs sont connus pour exister dans la table, vous pouvez utiliser cette astuce:Si il y a d'autres
NOT NULL
colonnes sans valeur par défaut, vous devrez ajouter des valeurs factices pour ceux. Il suffit de laisser sortir de laON DUPLICATE KEY UPDATE
et ils seront ignorés.