Bonjour,
Suite de mes aventures d'importation de valeurs d'une base non normalisée vers une normalisée...
1) Contexte
Dans la base actuelle, non normalisée, une table 'dictionnaire.dicodon' contient des variables que j'importe dans la table 'cartodico.variables' de la base normalisée.
Certaines de ces variables existantes ont des libellés, d'autres non.
Il y a des libellés supplémentaires dans la table 'dictionnaire.libelvar'. Il serait trop long et inutile d'expliquer pourquoi.
J'ai pu importer les 6103 variables différentes (sur 10030 lignes) de 'dictionnaire.dicodon' vers 'cartodico.variables' avec toutes les colonnes pour lesquelles j'avais des informations uniques pour chaque variable.
Je souhaite maintenant importer les libellés, d'abord de 'dictionnaire.dicodon', puis les libellés supplémentaires de 'dictionnaire.libelvar'.
2) Ce qui marche
La requête ci-dessous me permet d'importer 2814 libellés de 'dictionnaire.dicodon' donc dans 2814 variables sur 6103 de ma table 'cartodico.variables'.
La partie entre parenthèses 'SELECT CZ.ZDNom, CI.ImpNomTable, ...' me permet d'avoir la correspondance des 6103 variables avec celles de 'dicodon'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 /** Importation des libellés de 'dictionnaire.dicodon' dans 'cartodico.variables' */ CREATE TEMPORARY TABLE dictionnaire.variables_bis SELECT D.libelle, tmp.VarIndex FROM dictionnaire.dicodon D INNER JOIN ( SELECT CZ.ZDNom, CI.ImpNomTable, CV.VarAttribut, CV.VarIndex FROM cartodico.imports CI INNER JOIN cartodico.zonesdepot CZ ON CZ.ZDIndex = CI.ImpZoneDepot INNER JOIN cartodico.variables CV ON CI.ImpIndex = CV.VarImport )tmp ON tmp.ZDNom = D.base_orig AND tmp.ImpNomTable = D.table_orig AND tmp.VarAttribut = D.code_attr GROUP BY D.base_orig, D.table_orig, D.code_attr HAVING libelle <> ""; UPDATE cartodico.variables V SET V.VarLibelleCourt = (SELECT VB.libelle FROM dictionnaire.variables_bis VB WHERE V.VarIndex = VB.VarIndex); DROP TABLE variables_bis;
Le premier 'SELECT D.libelle, tmp.VarIndex...' me donne les 2814 libellés à importer et le n° de chaque variable où le libellé sera importé.
Après cette requête, j'ai donc dans 'cartodico.variables' :
- 2814 variables avec VarLibelleCourt NOT NULL ;
- 3289 variables avec VarLibelleCourt NULL.
3) Ce qui ne marche pas
J'essaie de faire pareil avec la requête ci-dessous pour importer les libellés supplémentaires de 'dictionnaire.libelvar' :
De la même manière, la partie entre parenthèses 'SELECT CZ.ZDNom, CI.ImpNomTable, ...' me permet d'avoir la correspondance des 3289 variables dont le libellé est NULL avec les variables issues de 'dicodon'.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 CREATE TEMPORARY TABLE dictionnaire.variables_ter SELECT L.libelle, tmp.VarIndex FROM dictionnaire.libelvar L INNER JOIN ( SELECT CZ.ZDNom, CI.ImpNomTable, CV.VarAttribut, CV.VarIndex FROM cartodico.imports CI INNER JOIN cartodico.zonesdepot CZ ON CZ.ZDIndex = CI.ImpZoneDepot INNER JOIN cartodico.variables CV ON CI.ImpIndex = CV.VarImport WHERE VarLibelleCourt IS NULL )tmp ON tmp.ZDNom = L.base_orig AND tmp.ImpNomTable = L.table_orig AND tmp.VarAttribut = L.code_attr GROUP BY L.base_orig, L.table_orig, L.code_attr HAVING L.libelle <> ""; UPDATE cartodico.variables V SET V.VarLibelleCourt = (SELECT VT.libelle FROM dictionnaire.variables_ter VT WHERE V.VarIndex = VT.VarIndex); DROP TABLE dictionnaire.variables_ter;
Le premier 'SELECT D.libelle, tmp.VarIndex...' me donne les 256 libellés à importer et le n° de chaque variable où le libellé sera importé.
Le problème est que le 'UPDATE' met à jour 3070 enregistrements de 'cartodico.variables', soit les 256 nouveaux libellés et met à NULL (valeur par défaut) tous les autres enregistrements !
J'ai essayé de déplacer ou de supprimer les parenthèses de la clause WHERE du UPDATE mais ça me renvoie une erreur à chaque fois.
Comment faire pour que ce UPDATE ne modifie que les 256 variables concernées et laisse les autres tranquilles ?
Partager