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 :

Fusionner plusieurs tables avec nombre de champs différents


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut Fusionner plusieurs tables avec nombre de champs différents
    Bonjour,
    Je souhaite fusionner plusieurs tables mysql, qui ont en commun certains champs (par ex : id, name, comment), mais certaines tables ont des champs en commun avec aucunes autres.
    Exemple :
    Je veux fusionner
    table1(id, name, comment)
    avec
    table2(id, name, comment, completeName, level)
    et avec
    table3(id, name, comment, disabled, restricted)

    Je veux que le resultat me donne:
    table4(id, name, comment, completeName, level, disabled, restricted)

    J'ai essayé de faire un select UNION select mais il faut que les tables aient les même colonnes.
    J'ai essayé de faire tout simplement
    select * from table1, table2, table3
    mais je me retrouve avec l'erreur
    "1052 Column id in field list is ambiguous"
    Quelle est la solution à mon problème ? Est-ce seulement possible ?

    Merci de votre aide =)

  2. #2
    Membre confirmé
    Avatar de tse_jc
    Homme Profil pro
    Data Solutions
    Inscrit en
    Août 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Data Solutions
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 287
    Points : 597
    Points
    597
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT t1.id,t1.name,t1.comment.t2.completeName,t2.level,t3.disabled,t3.restricted 
    FROM table1 AS t1 INNER JOIN table2 AS t2 ON t1.id=t2.id
    INNER JOIN table3 as t3 ON t1.id=t3.id

    Avec des étoiles on fait rien de bon^^

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    Merci, tse_jc de ta réponse.
    Je comprends bien, mais ce n'est pas tout à fait ce que je recherche :
    Les id de chaque tables n'ont vraiment aucun rapport entre eux, donc il ne faut pas créer de jointures entre eux.
    Moi ce que je recherche, c'est un affichage du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      id  |  name  |  comments  |  completeName  |  level  |  disabled  |  restricted
      5  |nomtable1| comment  |        NULL         |   NULL |    NULL    |      NULL 
      5  |nomtable2|  comment |  nom2complet    |     1    |    NULL    |     NULL 
      5  |nomtable3| comment  |         NULL        |   NULL |    yes      |       no
    L'id 5 est un exemple, il est unique dans chaque table.
    Or, avec ta solution, ces 3 lignes sont regroupées en une seule, et les champs "NULL" sont rempli (aléatoirement ?)
    En gros, ta solution donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      id  |  name  |  comments  |  completeName  |  level  |  disabled  |  restricted
      5  |nomtable1| comment  |    nom2complet  |   1      |    yes     |     no
    J'espère que je suis assez clair..

  4. #4
    Membre confirmé
    Avatar de tse_jc
    Homme Profil pro
    Data Solutions
    Inscrit en
    Août 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Data Solutions
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 287
    Points : 597
    Points
    597
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Oui en effet il ne m'est pas venu à l'esprit que tu souhaitais "fusionner" des entités de nature et de type différents (ce n'est pas une démarche très naturelle en même temps).

    Le problème c'est que tu ne peux pas faire de jointure associative entre des pommes et des poires, tu aurais des résultats incohérents.

    La seule condition possible pour résoudre ce problème c'est de faire une jointure sur un point commun aux trois tables avec la même technique que j'ai appliqué, sinon tu peux oublier.

    ++

    Note: Un effet NULL "dynamique", on ne peut l'avoir que sur un effet de jointure à gauche ou à droite sur une correspondance inexistante.

    Sinon tu peux toujours définir le nom des colonnes de sortie manuellement et relier les tables par des UNION et mettre manuellement les colonnes non correspondantes à NULL.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par tse_jc Voir le message
    Sinon tu peux toujours définir le nom des colonnes de sortie manuellement et relier les tables par des UNION et mettre manuellement les colonnes non correspondantes à NULL.
    Peux tu expliquer un peu plus en détail s'il te plait ? je ne comprends pas trop ta dernière proposition mais si ça peut être la solution...

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT id,name,comment,null AS completeName, null AS level, null AS disabled  , null AS restricted
    FROM table1
    UNION ALL
    SELECT id,name,comment,completeName, level, null AS disabled  , null AS restricted
    FROM table2
    UNION ALL
    SELECT id,name,comment,null AS completeName, null AS level, disabled  , restricted
    FROM table3

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    En effet ça ça marche.
    Merci beaucoup.

  8. #8
    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
    Pose toi quand même la question de la pertinence de la fusion !

    Que contiennent tes trois tables ? S'il s'agit de concepts sémantiques homonymes, OK il peut être pertinent de les fusionner, et encore !

    S'il s'agit de choses sémantiquement différentes, c'est probablement une bêtise de vouloir les fusionner !

    Sans plus d'information sur le contexte réel sur lequel tu veux faire ça, pas moyen de te conseiller efficacement.
    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 !

Discussions similaires

  1. Fusionner deux tables avec champs différents
    Par CyberMen dans le forum Débutez
    Réponses: 6
    Dernier message: 22/08/2012, 18h32
  2. Requete sur plusieurs table avec les memes champs
    Par broule dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/02/2010, 19h57
  3. Réponses: 9
    Dernier message: 09/05/2009, 17h34
  4. Réponses: 1
    Dernier message: 25/04/2009, 11h31
  5. Réponses: 1
    Dernier message: 03/03/2008, 14h20

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