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
Libérer: 2024-11-11 07:55:03
original
604 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal