Une opération parfois utile est de pouvoir peupler une nouvelle colonne des données dans une table avec des données provenant d’une deuxième table selon une colonne aux valeurs communes. Voici comment procéder (cliquez ci-dessous).
Pour donner un contexte concret j’avais besoin d’ajouter les noms anglais des pays dans une table countries reprenant des noms français à l’origine. Cela fut nécessaire car les noms de pays provenant de Facebook sont tous en anglais alors que le site sur lequel je travaille utilise des id numériques avec des noms de pays en français.
Pour ce faire j’ai récupéré une liste CSV des pays dans la langue de Shakespeare pour ensuite l’importer dans une nouvelle table countries_en. Il me restais à remplir une nouvelle colonne name_english dans countries avec la colonne names selon le code iso 2 à deux lettres.
Un UPDATE était indiqué du fait que les lignes existent déjà dans la table de destination. La syntaxe se révèle être assez simple. Il suffit de faire porter l’UPDATE sur deux tables. Ensuite, l’attribution ou SET se fait entre les champs des tables respectives. La condition WHERE permet d’établir la correspondance.
SET target.name_english = source.name
WHERE source.iso_code_2 = target.iso_code_2
– James Poulson.
Le code ci-dessus a été testé sur MySQL. Il y a des requêtes équivalentes pour d’autres bases de données. Je me souviens notamment d’une requête qui utilise des arguments similaire à un JOIN. Si tu as un SGBD de préférence je pourrais peut être trouver la requête correspondante.
Très intéressant, je viens d’apprendre quelque chose !
Est-ce qu’on sait sur quels SGBD ça fonctionne ou sur lesquels ça ne fonctionne pas ?