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!