Upadter plusieurs tables en une seule requête SQL sous MyAdmin

traderpierre Messages postés 291 Date d'inscription   Statut Membre Dernière intervention   -  
traderpierre Messages postés 291 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
je m' explique,
Dans ma base de données, j'ai plusieurs tables ayant chacune une colonne avec le même intitulé "id_lang",
Est-il possible d'updater les colonnes id_lang sur toutes ces tables en même temps, sachant que ces collonne ne sont pas liées entre elles,
J'avais essayé de mettre toutes les requêtes correspondant à chaque table dans la même requête mais ça ne fonctionne pas :
Voici mon code SQL :
UPDATE `ps_advice_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_attachment_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_attribute_group_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_attribute_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_badge_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_carrier_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_cart_rule_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_category_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_cms_category_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_cms_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_cms_role_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_configuration_kpi_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_configuration_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_contact_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_country_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_customization_field_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_feature_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_feature_value_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_gender_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_group_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_homeslider_slides_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_image_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_info_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_lang_shop` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_layered_indexable_attribute_group_lang_value` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_layered_indexable_attribute_lang_value` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_layered_indexable_feature_lang_value` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_layered_indexable_feature_value_lang_value` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_linksmenutop_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_link_block_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_manufacturer_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_meta_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_multihtmlblockbadeaude_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_multihtmlblockbadeaues_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_multihtmlblockbadeauit_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_multihtmlblockbadeauuk_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_multihtmlblockbandeaude_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_multihtmlblockbandeaues_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_multihtmlblockbandeaufr_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_multihtmlblockbandeauit_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_multihtmlblockbandeauuk_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_order_message_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_order_return_state_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_order_state_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_product_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_profile_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_quick_access_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_reassurance_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_risk_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);

Si je teste sur une table individuelle ça fonctionne "une seule ligne ci dessus"

Est il possible de lancer toutes ces updates en une seule requête ???

Merci par avance

1 réponse

jee pee Messages postés 41519 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
Bonjour,

Peut être un

UPDATE `ps_advice_lang` , `ps_attachment_lang`, ... , `ps_risk_lang` 
SET `ps_advice_lang.id_lang`= REPLACE(`ps_advice_lang.id_lang`,7,8),
    `ps_attachment_lang.id_lang`= REPLACE(`ps_attachment_lang.id_lang`,7,8),
...
   `ps_risk_lang.id_lang`= REPLACE(`ps_risk_lang.id_lang`,7,8)

voir : https://dev.mysql.com/doc/refman/8.0/en/update.html

Avec Oracle, je ferais une procédure PL/SQL qui interrogerait le dictionnaire de données pour trouver toutes les tables ayant le champ id_lang, et qui génèrerait un update dynamique avec les tables trouvées.

Cdlt
0
traderpierre Messages postés 291 Date d'inscription   Statut Membre Dernière intervention   6
 
ça ne fonctionne pas,
MySQL a répondu : Documentation
#1054 - Champ 'ps_advice_lang.id_lang' inconnu dans field list
0
jee pee Messages postés 41519 Date d'inscription   Statut Modérateur Dernière intervention   9 720 > traderpierre Messages postés 291 Date d'inscription   Statut Membre Dernière intervention  
 
aucune idée, c'est une erreur basique, champ inconnu
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > traderpierre Messages postés 291 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,
Le message est du au fait que les backquotes se mettent autour de chaque "objet" (nom de table, nom de champ...) et pas sur un "ensemble"
Par exemple
`ps_advice_lang.id_lang`

est à remplace par :
`ps_advice_lang`.`id_lang`
0
jee pee Messages postés 41519 Date d'inscription   Statut Modérateur Dernière intervention   9 720 > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
merci, c'est de ma faute, j'avais rajouté le nom de table devant le champ à partir de l'exemple de la question. D'ailleurs en mysql, c'est nécessaire/indispensable ces backquotes ?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > jee pee Messages postés 41519 Date d'inscription   Statut Modérateur Dernière intervention  
 
Uniquement pour les noms réservés et pour ceux qui auraient la mauvaise idée d'utiliser des accebts ou des espaces...
0