IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Consolidation de 5 tables en 1


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Octobre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Octobre 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut Consolidation de 5 tables en 1
    Bonjour à tous,

    Je me permets de solliciter votre aide sur un problème que je n'arrive pas à résoudre.

    j'ai un fichier excel avec 5 onglets qui je souhaite regrouper, cependant les fonctionnalités Excel à ma connaissance ne me permette pas de faire ce que je veux, j'ai donc importer les onglets Excel en base de donnée MYSQL.

    J'ai 5 tables contenant des prospects, les 5 tables ont les mêmes noms colonnes.
    Les mêmes prospects se trouvent présents dans les différentes tables avec plus ou moins d'informations renseignées

    Je souhaiterais fusionner les 5 tables en créant une seule ligne par prospect avec l'ensemble des elements regroupés sur les 5 tables
    La seule valeur commune pour regrouper les informations est le numero de téléphone qui est present dans les 5 tables et sur chaque ligne

    j'ai testé des Left Join avec des isnull() et des isnull dans le select mais la requête est beaucoup trop longue et je n'arrive pas au résultat attendu

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    INSERT INTO `mytableFinal`(`Région`, `Département`, `SIRET`, `Raison_sociale`, `Enseigne`, `Adresse_1`, `Adresse_2`, `Code_postal`, `Ville`, `Tel1`, `Fax`, `Mobile`, `Site`, `Mail`, `Date_dimmatriculation`, `Forme_Juridique`, `Titre_dir`, `Prédir`, `Nom_dir`, `Capital`, `CA_2016`, `Résultats_2016`, `EBE_2016`, `Effectif_2016`, `Tel2`, `Tel3`, `Statut_Innovation_Group`, `Email_secrétaire`, `Email_chef_datelier`, `Email_comptable`, `N°_TVA`, `LOGICIEL_DE_GESTION`, `LOGICIEL_DE_CHIFFRAGE`, `LOGICIEL_EAD`, `Peinture_Marque`, `Distributeur_principal_Peinture`, `Type`, `Marque`, `Origine`, `CA_2013`, `Résultats_2013`, `EBE_2013`, `Effectif_2013`)
    select 
    ifnull(ifnull(ifnull(ifnull(mytable2.Région,mytable3.Région),mytable4.Région),mytable5.Région),mytable6.Région) as Région,
    ifnull(ifnull(ifnull(ifnull(mytable2.Département,mytable3.Département),mytable4.Département),mytable5.Département),mytable6.Département) as Département,
    ifnull(ifnull(ifnull(ifnull(mytable2.SIRET,mytable3.SIRET),mytable4.SIRET),mytable5.SIRET),mytable6.SIRET) as SIRET,
    ifnull(ifnull(ifnull(ifnull(mytable2.Raison_sociale,mytable3.Raison_sociale),mytable4.Raison_sociale),mytable5.Raison_sociale),mytable6.Raison_sociale) as Raison_sociale,
    ifnull(ifnull(ifnull(ifnull(mytable2.Enseigne,mytable3.Enseigne),mytable4.Enseigne),mytable5.Enseigne),mytable6.Enseigne) as Enseigne,
    ifnull(ifnull(ifnull(ifnull(mytable2.Adresse_1,mytable3.Adresse_1),mytable4.Adresse_1),mytable5.Adresse_1),mytable6.Adresse_1) as Adresse_1,
    ifnull(ifnull(ifnull(ifnull(mytable2.Adresse_2,mytable3.Adresse_2),mytable4.Adresse_2),mytable5.Adresse_2),mytable6.Adresse_2) as Adresse_2,
    ifnull(ifnull(ifnull(ifnull(mytable2.Code_postal,mytable3.Code_postal),mytable4.Code_postal),mytable5.Code_postal),mytable6.Code_postal) as Code_postal,
    ifnull(ifnull(ifnull(ifnull(mytable2.Ville,mytable3.Ville),mytable4.Ville),mytable5.Ville),mytable6.Ville) as Ville,
    ifnull(ifnull(ifnull(ifnull(mytable2.Tel1,mytable3.Tel1),mytable4.Tel1),mytable5.Tel1),mytable6.Tel1) as Tel1,
    ifnull(ifnull(ifnull(ifnull(mytable2.Fax,mytable3.Fax),mytable4.Fax),mytable5.Fax),mytable6.Fax) as Fax,
    ifnull(ifnull(ifnull(ifnull(mytable2.Mobile,mytable3.Mobile),mytable4.Mobile),mytable5.Mobile),mytable6.Mobile) as Mobile,
    ifnull(ifnull(ifnull(ifnull(mytable2.Site,mytable3.Site),mytable4.Site),mytable5.Site),mytable6.Site) as Site,
    ifnull(ifnull(ifnull(ifnull(mytable2.Mail,mytable3.Mail),mytable4.Mail),mytable5.Mail),mytable6.Mail) as Mail,
    ifnull(ifnull(ifnull(ifnull(mytable2.Date_dimmatriculation,mytable3.Date_dimmatriculation),mytable4.Date_dimmatriculation),mytable5.Date_dimmatriculation),mytable6.Date_dimmatriculation) as Date_dimmatriculation,
    ifnull(ifnull(ifnull(ifnull(mytable2.Forme_Juridique,mytable3.Forme_Juridique),mytable4.Forme_Juridique),mytable5.Forme_Juridique),mytable6.Forme_Juridique) as Forme_Juridique,
    ifnull(ifnull(ifnull(ifnull(mytable2.Titre_dir,mytable3.Titre_dir),mytable4.Titre_dir),mytable5.Titre_dir),mytable6.Titre_dir) as Titre_dir,
    ifnull(ifnull(ifnull(ifnull(mytable2.Prédir,mytable3.Prédir),mytable4.Prédir),mytable5.Prédir),mytable6.Prédir) as Prédir,
    ifnull(ifnull(ifnull(ifnull(mytable2.Nom_dir,mytable3.Nom_dir),mytable4.Nom_dir),mytable5.Nom_dir),mytable6.Nom_dir) as Nom_dir,
    ifnull(ifnull(ifnull(ifnull(mytable2.Capital,mytable3.Capital),mytable4.Capital),mytable5.Capital),mytable6.Capital) as Capital,
    ifnull(ifnull(ifnull(ifnull(mytable2.CA_2016,mytable3.CA_2016),mytable4.CA_2016),mytable5.CA_2016),mytable6.CA_2016) as CA_2016,
    ifnull(ifnull(ifnull(ifnull(mytable2.Résultats_2016,mytable3.Résultats_2016),mytable4.Résultats_2016),mytable5.Résultats_2016),mytable6.Résultats_2016) as Résultats_2016,
    ifnull(ifnull(ifnull(ifnull(mytable2.EBE_2016,mytable3.EBE_2016),mytable4.EBE_2016),mytable5.EBE_2016),mytable6.EBE_2016) as EBE_2016,
    ifnull(ifnull(ifnull(ifnull(mytable2.Effectif_2016,mytable3.Effectif_2016),mytable4.Effectif_2016),mytable5.Effectif_2016),mytable6.Effectif_2016) as Effectif_2016,
    ifnull(ifnull(ifnull(ifnull(mytable2.Tel2,mytable3.Tel2),mytable4.Tel2),mytable5.Tel2),mytable6.Tel2) as Tel2,
    ifnull(ifnull(ifnull(ifnull(mytable2.Tel3,mytable3.Tel3),mytable4.Tel3),mytable5.Tel3),mytable6.Tel3) as Tel3,
    ifnull(ifnull(ifnull(ifnull(mytable2.Statut_Innovation_Group,mytable3.Statut_Innovation_Group),mytable4.Statut_Innovation_Group),mytable5.Statut_Innovation_Group),mytable6.Statut_Innovation_Group) as Statut_Innovation_Group,
    ifnull(ifnull(ifnull(ifnull(mytable2.Email_secrétaire,mytable3.Email_secrétaire),mytable4.Email_secrétaire),mytable5.Email_secrétaire),mytable6.Email_secrétaire) as Email_secrétaire,
    ifnull(ifnull(ifnull(ifnull(mytable2.Email_chef_datelier,mytable3.Email_chef_datelier),mytable4.Email_chef_datelier),mytable5.Email_chef_datelier),mytable6.Email_chef_datelier) as Email_chef_datelier,
    ifnull(ifnull(ifnull(ifnull(mytable2.Email_comptable,mytable3.Email_comptable),mytable4.Email_comptable),mytable5.Email_comptable),mytable6.Email_comptable) as Email_comptable,
    ifnull(ifnull(ifnull(ifnull(mytable2.N°_TVA,mytable3.N°_TVA),mytable4.N°_TVA),mytable5.N°_TVA),mytable6.N°_TVA) as N°_TVA,
    ifnull(ifnull(ifnull(ifnull(mytable2.LOGICIEL_DE_GESTION,mytable3.LOGICIEL_DE_GESTION),mytable4.LOGICIEL_DE_GESTION),mytable5.LOGICIEL_DE_GESTION),mytable6.LOGICIEL_DE_GESTION) as LOGICIEL_DE_GESTION,
    ifnull(ifnull(ifnull(ifnull(mytable2.LOGICIEL_DE_CHIFFRAGE,mytable3.LOGICIEL_DE_CHIFFRAGE),mytable4.LOGICIEL_DE_CHIFFRAGE),mytable5.LOGICIEL_DE_CHIFFRAGE),mytable6.LOGICIEL_DE_CHIFFRAGE) as LOGICIEL_DE_CHIFFRAGE,
    ifnull(ifnull(ifnull(ifnull(mytable2.LOGICIEL_EAD,mytable3.LOGICIEL_EAD),mytable4.LOGICIEL_EAD),mytable5.LOGICIEL_EAD),mytable6.LOGICIEL_EAD) as LOGICIEL_EAD,
    ifnull(ifnull(ifnull(ifnull(mytable2.Peinture_Marque,mytable3.Peinture_Marque),mytable4.Peinture_Marque),mytable5.Peinture_Marque),mytable6.Peinture_Marque) as Peinture_Marque,
    ifnull(ifnull(ifnull(ifnull(mytable2.Distributeur_principal_Peinture,mytable3.Distributeur_principal_Peinture),mytable4.Distributeur_principal_Peinture),mytable5.Distributeur_principal_Peinture),mytable6.Distributeur_principal_Peinture) as Distributeur_principal_Peinture,
    ifnull(ifnull(ifnull(ifnull(mytable2.Type,mytable3.Type),mytable4.Type),mytable5.Type),mytable6.Type) as Type,
    ifnull(ifnull(ifnull(ifnull(mytable2.Marque,mytable3.Marque),mytable4.Marque),mytable5.Marque),mytable6.Marque) as Marque,
    ifnull(ifnull(ifnull(ifnull(mytable2.Origine,mytable3.Origine),mytable4.Origine),mytable5.Origine),mytable6.Origine) as Origine,
    ifnull(ifnull(ifnull(ifnull(mytable2.CA_2013,mytable3.CA_2013),mytable4.CA_2013),mytable5.CA_2013),mytable6.CA_2013) as CA_2013,
    ifnull(ifnull(ifnull(ifnull(mytable2.Résultats_2013,mytable3.Résultats_2013),mytable4.Résultats_2013),mytable5.Résultats_2013),mytable6.Résultats_2013) as Résultats_2013,
    ifnull(ifnull(ifnull(ifnull(mytable2.EBE_2013,mytable3.EBE_2013),mytable4.EBE_2013),mytable5.EBE_2013),mytable6.EBE_2013) as EBE_2013,
    ifnull(ifnull(ifnull(ifnull(mytable2.Effectif_2013,mytable3.Effectif_2013),mytable4.Effectif_2013),mytable5.Effectif_2013),mytable6.Effectif_2013) as Effectif_2013
    from mytable2 
    LEFT JOIN mytable3 on mytable2.Tel1 = mytable3.Tel1 
    LEFT JOIN mytable4 on mytable2.Tel1 = mytable4.Tel1 
    LEFT JOIN mytable5 on mytable2.Tel1 = mytable5.Tel1 
    LEFT JOIN mytable6 on mytable2.Tel1 = mytable6.Tel1

    Merci, si un expert Mysql passe par la pour me donner un coup de main

    Cordialement

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 770
    Points : 52 723
    Points
    52 723
    Billets dans le blog
    5
    Par défaut
    Commencez par remplacer tous vos IFNULL imbriqués qui d'ailleurs n'existe pas en SQL (c'est une merdouille MySQmerde) par COALESCE qui est la norme.

    Ensuite il faut faire des FULL OUTER JOIN

    Enfin passer par du UNION ALL ne serait pas un luxe....

    Bref, appendre le langage SQL !
    Mon site web comme mes livres peuvent vous y aider !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Octobre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Octobre 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Merci de l'intérêt que vous avez porter à ma demande et de votre rapidité
    J'ai remplacer les isnull par COALESCE "Merci"
    J'ai malheureusement posté le message dans la mauvaise section étant en Mysql

    Etant en Mysql, il me semble que je n'ai pas la possibilité de joindre les résultats avec la commande FULL OUTER JOIN

    J'aimerai effectivement utiliser la méthode UNION ALL mais je ne sais pas comment m'y prendre pour joindre l'ensemble des résultats

    Merci d'avance


    Ps: Si un modérateur peut déplacer mon Post ? merci

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 770
    Points : 52 723
    Points
    52 723
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par defrayvar83 Voir le message
    J'aimerai effectivement utiliser la méthode UNION ALL mais je ne sais pas comment m'y prendre pour joindre l'ensemble des resultats
    Lisez mon cours : http://sqlpro.developpez.com/cours/sqlaz/ensembles/#L3

    Cela fait partit du B A BA du SQL !
    Sans doute avez vous séché les cours ?

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Vous devriez plutôt en profiter pour modéliser correctement votre base de données. Un SGBD n'est pas un tableur !
    On peut vous y aider dans le forum Schéma.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Octobre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Octobre 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Lisez mon cours : http://sqlpro.developpez.com/cours/sqlaz/ensembles/#L3

    Cela fait partit du B A BA du SQL !
    Sans doute avez vous séché les cours ?

    A +
    effectivement, je n'ai pas pris de cours concernant le SQL ...

    Je connais la fonction Union, mais je n'arrive pas comprendre comment elle pourrait m'aider pour générer une seule ligne par prospect contenant l'ensemble des informations sur les 5 tables

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Vous devriez plutôt en profiter pour modéliser correctement votre base de données. Un SGBD n'est pas un tableur !
    On peut vous y aider dans le forum Schéma.
    J'abonde dans ce sens avec énergie : vous faites vos jointures sur des n° de téléphone

  8. #8
    Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Octobre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Octobre 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    J'abonde dans ce sens avec énergie : vous faites vos jointures sur des n° de téléphone

    Je vais preciser ma démarche
    A la base les données étaient stockés sur des fichiers excel, ne sachant pas régler ce problème sur excel, j'ai importer les données sur une BDD
    oui la seule valeur commune est le telephone pour les regrouper ...

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Base mal modélisée => donnée dont l'intégrité n'est pas garantie, dont l'accès est complexe et couteux en CPU
    Si vous en avez la possibilité, refaites un modèle dans les règles de l'art, vous serez gagnant à tout point de vue

  10. #10
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Normalement, le SIRET devrait aussi être une clé candidate... sauf si vous n'avez pas le SIRET de toutes les entreprises dans vos différentes tables.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  11. #11
    Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Octobre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Octobre 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Base mal modélisée => donnée dont l'intégrité n'est pas garantie, dont l'accès est complexe et couteux en CPU
    Si vous en avez la possibilité, refaites un modèle dans les règles de l'art, vous serez gagnant à tout point de vue

    Oui je vous l'accorde sans aucune discussion, cependant je suis fasse à une problématique qui ne me donne pas le choix.

    Merci d'avance pour votre aide

  12. #12
    Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Octobre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Octobre 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Normalement, le SIRET devrait aussi être une clé candidate... sauf si vous n'avez pas le SIRET de toutes les entreprises dans vos différentes tables.
    Merci CinePhil, non le SIRET n'est pas disponible dans toutes les tables malheuresement

  13. #13
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Combien de lignes au total y a t-il dans vos feuilles de tableur ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  14. #14
    Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Octobre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Octobre 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Combien de lignes au total y a t-il dans vos feuilles de tableur ?
    fichier 1: 17000
    fichier 2: 9000
    fichier 3: 6000
    fichier 4: 264
    fichier 5: 950

    il y a au total 33214 lignes à regrouper, il y a des doublons et sur les doublons les informations sont dispatcher sur les 5 fichiers

  15. #15
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    OK donc je maintiens mon conseil de modéliser correctement vos données et de construire la BDD normalisée qui en découle.

    Vite fait, vous avez au moins :
    - des régions ;
    - des départements ;
    - des villes ;
    - des adresses ;
    - des numéros de téléphone (de type, fixe, mobile, fax) ;
    - des adresses électroniques ;
    - des entreprises (personnes morales) ;
    - des personnes physiques ;
    - des résultats chiffrés ;
    - des logiciels.

    Écrivez les règles de gestion des données puis réalisez un Modèle Conceptuel de Données (de préférence avec un logiciel de modélisation tel que JMerise) que vous pouvez proposer au forum Schéma.

    Une fois que vous aurez construit votre BDD, il sera temps de la remplir avec vos données de manière rationnelle.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  16. #16
    Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Octobre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Octobre 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Merci pour vos conseils CinePhil.
    Pour ceux que ça intéresse et qui peuvent avoir la meme problématique

    j'ai regrouper sur une table l'ensemble des Tel unique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Insert Into mytableFinal
    select  * from mytable2 where Tel1 not in(select Tel1 from mytableFinal)
    j'ai reproduit cette requête 5 fois pour chaque table : mytable2 - mytable3 - mytable4 - mytable4 - mytable5

    je me suis retrouvé avec une table regroupant l'ensemble de mes prospects, cependant l'ensemble des données n'étaient pas à jour

    Donc, j'ai créer un CURSOR pour parcourir les 5 tables et mettre à jour chaque champ (null) de chaque ligne qui correspond à mon Tel unique

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    BEGIN
    DECLARE current_tel, current_region, current_departement, current_siret,current_raison,current_enseigne,current_ad1,current_ad2,current_cp,current_ville,current_fax,current_mobile,current_site,current_mail,current_immat,current_juri,current_titre,current_predir,current_nom,current_capital,current_ca,current_result,current_ebe,current_effectif,current_tel2,current_tel3,current_statut,current_emails,current_emaila,current_emailc,current_tva,current_gestion,current_chiffrage,current_ead,current_pmarque,current_distrib,current_type,current_marque,current_origine,current_ca2013,current_r2013,current_ebe2013,current_effectif2013 VARCHAR(200);
    DECLARE cursor_prospect CURSOR FOR 
        SELECT Tel1, `Région`, `Département`,`SIRET`, `Raison_sociale`, `Enseigne`, `Adresse_1`, `Adresse_2`, `Code_postal`, `Ville`, `Fax`, `Mobile`, `Site`, `Mail`, `Date_dimmatriculation`, `Forme_Juridique`, `Titre_dir`, `Prédir`, `Nom_dir`, `Capital`, `CA_2016`, `Résultats_2016`, `EBE_2016`, `Effectif_2016`, `Tel2`, `Tel3`, `Statut_Innovation_Group`, `Email_secrétaire`, `Email_chef_datelier`, `Email_comptable`, `N°_TVA`, `LOGICIEL_DE_GESTION`, `LOGICIEL_DE_CHIFFRAGE`, `LOGICIEL_EAD`, `Peinture_Marque`, `Distributeur_principal_Peinture`, `Type`, `Marque`, `Origine`, `CA_2013`, `Résultats_2013`, `EBE_2013`, `Effectif_2013` FROM Base_2013;
     
    OPEN cursor_prospect;
    prospect_loop: LOOP
    FETCH cursor_prospect INTO current_tel, current_region, current_departement, current_siret,current_raison,current_enseigne,current_ad1,current_ad2,current_cp,current_ville,current_fax,current_mobile,current_site,current_mail,current_immat,current_juri,current_titre,current_predir,current_nom,current_capital,current_ca,current_result,current_ebe,current_effectif,current_tel2,current_tel3,current_statut,current_emails,current_emaila,current_emailc,current_tva,current_gestion,current_chiffrage,current_ead,current_pmarque,current_distrib,current_type,current_marque,current_origine,current_ca2013,current_r2013,current_ebe2013,current_effectif2013;
    UPDATE mytableFinal SET `Région`=current_region WHERE Tel1 = current_tel and `Région` is null;
    UPDATE mytableFinal SET `Département`=current_departement WHERE Tel1 = current_tel and `Département` is null;
    UPDATE mytableFinal SET `SIRET`=current_siret WHERE Tel1 = current_tel and `SIRET` is null;
    UPDATE mytableFinal SET `Raison_sociale`=current_raison WHERE Tel1 = current_tel and `Raison_sociale` is null;
    UPDATE mytableFinal SET `Enseigne`=current_enseigne WHERE Tel1 = current_tel and `Enseigne` is null;
    UPDATE mytableFinal SET `Adresse_1`=current_ad1 WHERE Tel1 = current_tel and `Adresse_1` is null; 
    UPDATE mytableFinal SET `Adresse_2`=current_ad2 WHERE Tel1 = current_tel and `Adresse_2` is null;
    UPDATE mytableFinal SET `Code_postal`=current_cp WHERE Tel1 = current_tel and `Code_postal` is null; 
    UPDATE mytableFinal SET `Ville`=current_ville WHERE Tel1 = current_tel and `Ville` is null;
    UPDATE mytableFinal SET `Fax`=current_fax WHERE Tel1 = current_tel and `Fax` is null;
    UPDATE mytableFinal SET `Mobile`=current_mobile WHERE Tel1 = current_tel and `Mobile` is null;
    UPDATE mytableFinal SET `Site`=current_site WHERE Tel1 = current_tel and `Site` is null;
    UPDATE mytableFinal SET `Mail`=current_mail WHERE Tel1 = current_tel and `Mail` is null;
    UPDATE mytableFinal SET `Date_dimmatriculation`=current_immat WHERE Tel1 = current_tel and `Date_dimmatriculation` is null; 
    UPDATE mytableFinal SET `Forme_Juridique`=current_juri WHERE Tel1 = current_tel and `Forme_Juridique` is null;
    UPDATE mytableFinal SET `Titre_dir`=current_titre WHERE Tel1 = current_tel and `Titre_dir` is null;
    UPDATE mytableFinal SET `Prédir`=current_predir WHERE Tel1 = current_tel and `Prédir` is null;
    UPDATE mytableFinal SET `Nom_dir`=current_nom WHERE Tel1 = current_tel and `Nom_dir` is null;
    UPDATE mytableFinal SET `Capital`=current_capital WHERE Tel1 = current_tel and `Capital` is null;
    UPDATE mytableFinal SET `CA_2016`=current_ca WHERE Tel1 = current_tel and `CA_2016` is null;
    UPDATE mytableFinal SET `Résultats_2016`=current_result WHERE Tel1 = current_tel and `Résultats_2016` is null; 
    UPDATE mytableFinal SET `EBE_2016`=current_ebe WHERE Tel1 = current_tel and `EBE_2016` is null;
    UPDATE mytableFinal SET `Effectif_2016`=current_effectif WHERE Tel1 = current_tel and `Effectif_2016` is null; 
    UPDATE mytableFinal SET `Tel2`=current_tel2 WHERE Tel1 = current_tel and `Tel2` is null;
    UPDATE mytableFinal SET `Tel3`=current_tel3 WHERE Tel1 = current_tel and `Tel3` is null;
    UPDATE mytableFinal SET `Statut_Innovation_Group`=current_statut WHERE Tel1 = current_tel and `Statut_Innovation_Group` is null;
    UPDATE mytableFinal SET `Email_secrétaire`=current_emails WHERE Tel1 = current_tel and `Email_secrétaire` is null;
    UPDATE mytableFinal SET `Email_chef_datelier`=current_emaila WHERE Tel1 = current_tel and `Email_chef_datelier` is null; 
    UPDATE mytableFinal SET `Email_comptable`=current_emailc WHERE Tel1 = current_tel and `Email_comptable` is null;
    UPDATE mytableFinal SET `N°_TVA`=current_tva WHERE Tel1 = current_tel and `N°_TVA` is null;
    UPDATE mytableFinal SET `LOGICIEL_DE_GESTION`=current_gestion WHERE Tel1 = current_tel and `LOGICIEL_DE_GESTION` is null; 
    UPDATE mytableFinal SET `LOGICIEL_DE_CHIFFRAGE`=current_chiffrage WHERE Tel1 = current_tel and `LOGICIEL_DE_CHIFFRAGE` is null;
    UPDATE mytableFinal SET `LOGICIEL_EAD`=current_ead WHERE Tel1 = current_tel and `LOGICIEL_EAD` is null;
    UPDATE mytableFinal SET `Peinture_Marque`=current_pmarque WHERE Tel1 = current_tel and `Peinture_Marque` is null; 
    UPDATE mytableFinal SET `Distributeur_principal_Peinture`=current_distrib WHERE Tel1 = current_tel and `Distributeur_principal_Peinture` is null;
    UPDATE mytableFinal SET `Type`=current_type WHERE Tel1 = current_tel and `Type` is null;
    UPDATE mytableFinal SET `Marque`=current_marque WHERE Tel1 = current_tel and `Marque` is null;
    UPDATE mytableFinal SET `Origine`=current_origine WHERE Tel1 = current_tel and `Origine` is null;
    UPDATE mytableFinal SET `CA_2013`=current_ca2013 WHERE Tel1 = current_tel and `CA_2013` is null;
    UPDATE mytableFinal SET `Résultats_2013`=current_r2013 WHERE Tel1 = current_tel and `Résultats_2013` is null; 
    UPDATE mytableFinal SET `EBE_2013`=current_ebe2013 WHERE Tel1 = current_tel and `EBE_2013` is null;
    UPDATE mytableFinal SET `Effectif_2013`=current_effectif2013 WHERE Tel1 = current_tel and `Effectif_2013` is null;
    END LOOP prospect_loop;
     
    END
    J'ai modifié et lancé 5 fois ce cursor en modifiant le nom de la table à parcourir.
    Je suis sure que j'aurais pu faire plus simple, n'est-ce pas SQLpro ?

    Je pensais réellement avoir plus d'aide en postant sur ce forum, mais apparement on préfère me dire que je suis pas assez aller à l'école sans réellement comprendre le soucis et sans donner des réponses aux questions, c'est dommage ...

    Je peux comprendre que mon utilisation de MYSQL été un peu particuliere, mais je n'avais pas le choix aux vues des elements que j'avais en ma possession ....

    Merci à ceux qui m'on eclairé
    bonne continuation

  17. #17
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut defrayvar83.

    C'est bien compliqué ce que vous faites.

    Voici un tout petit exemple basé sur deux tables. Il suffit de généraliser cet exemple pour fusionner vos cinq tables.
    Une remarque d'importance. Dans la table "trav", j'ai créé un "index unique" afin de détecter sur la "col2" les doublons.
    Si vous n'utilisez pas cet "index unique", mon exemple ne fonctionnera pas.
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
        DEFAULT CHARACTER SET `latin1`
        DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `trav`
    --------------
     
    --------------
    CREATE TABLE `trav`
    ( `col1`   varchar(255)       null,
      `col2`   smallint unsigned  null,
      `col3`   varchar(255)       null,
     unique index `idx` (`col2`)
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test_1`
    --------------
     
    --------------
    CREATE TABLE `test_1`
    ( `col1`   varchar(255)       null,
      `col2`   smallint unsigned  null,
      `col3`   varchar(255)       null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `test_1` (`col1`,`col2`,`col3`) values
      ('un',   1,    null),
      (null,   2,  'vert')
    --------------
     
    --------------
    select * from `test_1`
    --------------
     
    +------+------+------+
    | col1 | col2 | col3 |
    +------+------+------+
    | un   |    1 | NULL |
    | NULL |    2 | vert |
    +------+------+------+
    --------------
    DROP TABLE IF EXISTS `test_2`
    --------------
     
    --------------
    CREATE TABLE `test_2`
    ( `col1`   varchar(255)       null,
      `col2`   smallint unsigned  null,
      `col3`   varchar(255)       null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `test_2` (`col1`,`col2`,`col3`) values
      (null,   1, 'rouge'),
      ('deux', 2,    null)
    --------------
     
    --------------
    select * from `test_2`
    --------------
     
    +------+------+-------+
    | col1 | col2 | col3  |
    +------+------+-------+
    | NULL |    1 | rouge |
    | deux |    2 | NULL  |
    +------+------+-------+
    --------------
    commit
    --------------
     
    --------------
    insert into `trav` (`col1`,`col2`,`col3`)
              select  * from (  select  col1, col2, col3
                                  from  `test_1`   as t1
                                 union
                                select  col1, col2, col3
                                  from  `test_2` as t2
                             ) as x
    on duplicate key  update col1 = coalesce(trav.col1, x.col1),
                             col3 = coalesce(trav.col3, x.col3)
    --------------
     
    --------------
    select * from `trav`
    --------------
     
    +------+------+-------+
    | col1 | col2 | col3  |
    +------+------+-------+
    | un   |    1 | rouge |
    | deux |    2 | vert  |
    +------+------+-------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
    Appuyez sur une touche pour continuer...
    La solution se trouve dans la dernière requête de ce script mysql.

    La table "trav" sert uniquement au chargement et à la fusion de vos cinq tables Excel. Normalement, elle n'a pas vocation à devenir permanente.
    Comme son nom l'indique, cette table est destiner à dispatcher vos données dans les différentes tables comme le conseil CinePhil.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  18. #18
    Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Octobre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Octobre 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup Artemus24

    je vais étudier cela des demain !
    Merci pour votre aide

  19. #19
    Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Octobre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Octobre 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Super Artemus24, je n'ai pas réussi à attendre demain

    merci énormément, la requête prend 5sec et le résultat est top, je ne connaissais pas la fonction ON DUPLICATE KEY UPDATE

    Genial !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Consolider plusieurs tables sous access
    Par faniette dans le forum C++Builder
    Réponses: 1
    Dernier message: 28/05/2011, 23h25
  2. Réponses: 1
    Dernier message: 14/12/2009, 16h57
  3. consolidation des données dans une table
    Par ecom_adil dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 17/03/2009, 08h26
  4. Réponses: 5
    Dernier message: 28/08/2006, 17h25
  5. Réponses: 3
    Dernier message: 27/10/2004, 23h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo