C'est parti !
Le fichier Excel au format CSV a maintenant la structure suivante :
id nom_contact nom_structure nom_typologie nom_pays
1 Fernand Ets Naudin Typo C Belgique
2 Raoul La péniche Typo A France
3 Paul La péniche Typo A France
Structure de la table imageExcel correspondante :
CREATE TABLE imageExcel
(
id INTEGER NOT NULL
, nom_contact VARCHAR(16) NOT NULL
, nom_structure VARCHAR(16) NOT NULL
, Nom_Typologie VARCHAR(16) NOT NULL
, Nom_Pays VARCHAR(16) NOT NULL
, CONSTRAINT imageExcel_PK PRIMARY KEY (id)
) ;
On met en œuvre une table supplémentaire, destinée à héberger les valeurs des clés primaires correspondant aux noms des typologies et pays :
CREATE TABLE imageExcelComplet
(
id INTEGER NOT NULL
, nom_contact VARCHAR(16) NOT NULL
, nom_structure VARCHAR(16) NOT NULL
, Id_Typologie INTEGER NOT NULL
, id_pays INTEGER NOT NULL
, CONSTRAINT imageExcel_PK PRIMARY KEY (id)
, CONSTRAINT imageExcel_Pays_FK FOREIGN KEY (id_pays)
REFERENCES PAYS (id_pays)
, CONSTRAINT imageExcel_Typologie_FK FOREIGN KEY (Id_Typologie)
REFERENCES TYPOLOGIE (Id_Typologie)
) ;
D’où le script SQL :
CREATE TABLE PAYS
(
Id_Pays INTEGER NOT NULL
, Nom_Pays VARCHAR(16) NOT NULL
, CONSTRAINT PAYS_PK PRIMARY KEY (Id_Pays)
) ;
INSERT INTO PAYS (Id_Pays, Nom_Pays) VALUES (1, 'France'), (2, 'Belgique'), (3, 'Canada') ;
CREATE TABLE TYPOLOGIE
(
Id_Typologie INTEGER NOT NULL
, Nom_Typologie VARCHAR(16) NOT NULL
, CONSTRAINT PAYS_PK PRIMARY KEY (Id_Typologie)
) ;
INSERT INTO TYPOLOGIE (Id_Typologie, Nom_Typologie) VALUES (1, 'Typo A'), (2, 'Typo B'), (3, 'Typo C') ;
CREATE TABLE imageExcel
(
id INTEGER NOT NULL
, nom_contact VARCHAR(16) NOT NULL
, nom_structure VARCHAR(16) NOT NULL
, Nom_Typologie VARCHAR(16) NOT NULL
, Nom_Pays VARCHAR(16) NOT NULL
, CONSTRAINT imageExcel_PK PRIMARY KEY (id)
) ;
LOAD DATA INFILE 'D:\Developpez/$MySQL/geeka.csv' INTO TABLE imageExcel
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\r\n'
IGNORE 1 ROWS ;
SELECT * FROM imageExcel ;
CREATE TABLE imageExcelComplet
(
id INTEGER NOT NULL
, nom_contact VARCHAR(16) NOT NULL
, nom_structure VARCHAR(16) NOT NULL
, Id_Typologie INTEGER NOT NULL
, id_pays INTEGER NOT NULL
, CONSTRAINT imageExcel_PK PRIMARY KEY (id)
, CONSTRAINT imageExcel_Pays_FK FOREIGN KEY (id_pays)
REFERENCES PAYS (id_pays)
, CONSTRAINT imageExcel_Typologie_FK FOREIGN KEY (Id_Typologie)
REFERENCES TYPOLOGIE (Id_Typologie)
) ;
INSERT INTO imageExcelComplet (id, nom_contact, nom_structure, Id_Typologie, id_pays)
select x.id, x.nom_contact, x.nom_structure, y.Id_Typologie, z.id_pays
from imageExcel as x, TYPOLOGIE as y, PAYS as z
where x.Nom_Typologie = y.Nom_Typologie AND x.Nom_Pays = z.Nom_Pays
;
SELECT * FROM imageExcelComplet ;
=>
id nom_contact nom_structure Id_Typologie id_pays
1 Fernand Ets Naudin 3 2
2 Raoul La péniche 1 1
3 Paul La péniche 1 1
En espérant que que vous n'aurez pas d'erreurs d'intégrité référentielle, mais là, je n'y peux rien, sauf à rajouter un contrôle ad-hoc lor de l'INSERT...
Partager