Maison >base de données >tutoriel mysql >Comment puis-je mettre à jour efficacement les entrées MySQL avec de nouvelles valeurs à l'aide de l'instruction CASE ?

Comment puis-je mettre à jour efficacement les entrées MySQL avec de nouvelles valeurs à l'aide de l'instruction CASE ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-11 07:55:03615parcourir

How can I efficiently update MySQL entries with new values using the CASE statement?

Mise à jour des entrées MySQL à l'aide de CASE pour de nouvelles valeurs

Cet article aborde le défi de la mise à jour en masse des prix des annonces en fonction de l'ID dans une base de données MySQL . Un problème courant rencontré lors de cette tentative est l'utilisation de l'instruction CASE, qui, lorsqu'elle est mal utilisée, peut conduire à des résultats inattendus.

La requête fournie dans la question contient un défaut fondamental. Il utilise l'instruction CASE pour définir la colonne Prix, mais il ne spécifie pas explicitement la valeur des enregistrements dont les ID ne sont pas inclus dans les clauses WHEN. Par conséquent, ces enregistrements seront mis à jour avec des valeurs NULL.

Pour résoudre ce problème, la structure de requête correcte doit ressembler à ce qui suit :

UPDATE  ae44
SET     price =
        CASE
        WHEN ID = 'AT259793380' THEN
                '500'
        WHEN ID = 'AT271729590' THEN
                '600'
        WHEN ID = 'AT275981020' THEN
                '700'
        END

Cependant, cette requête présente toujours un inconvénient : elle mettre à jour les enregistrements avec des ID non répertoriés dans les clauses WHEN avec des valeurs NULL. Pour limiter la mise à jour aux seuls ID spécifiés, une approche plus sélective est nécessaire :

UPDATE  ae44
JOIN    (
        SELECT  'AT259793380' AS oldval, '500' AS newval
        UNION ALL
        SELECT  'AT271729590' AS oldval, '600' AS newval
        UNION ALL
        SELECT  'AT275981020' AS oldval, '700' AS newval
        ) q
ON      ae44.id = q.oldval
SET     price = q.newval

Cette requête utilise une sous-requête pour créer une table temporaire avec les anciennes et nouvelles valeurs spécifiées. Il utilise ensuite un JOIN pour faire correspondre les enregistrements de la table ae44 avec ceux de la sous-requête en fonction de l'ID. Seuls les enregistrements avec des identifiants correspondants verront leurs prix mis à jour avec la nouvelle valeur correspondante, laissant tous les autres enregistrements inchangés.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn