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

Langage SQL Discussion :

[MySQL] Jointure à 5 tables


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 95
    Points : 42
    Points
    42
    Par défaut [MySQL] Jointure à 5 tables
    Bonjour @ tous,

    J'ai 1 base MySQL dans laquelle j'ai 5 tables où table_index référence un élément en fonction de son type (valué à 2, 3, 4 ou 5).

    table_index
    - id
    - type
    - id_element

    table1
    - id
    - nom
    - date

    table2
    - id
    - nom
    - date

    table3
    - id
    - nom
    - date

    table4
    - id
    - nom
    - date

    Je veux faire un SELECT table_index en triant par la date de l'élément (provenant soit de table1, table2, table3 ou table4).

    Voici ce que j'ai essayé mais ça ne marche pas, qu'est-ce qui ne va pas ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT table_index.id, id_type, id_element, table1.nom, table1.date, table2.nom, table2.date, table3.nom, table3.date, table4.nom, table4.date FROM table_index
    INNER JOIN table1 ON (table_index.id_type=2 AND table_index.id_element = table1.id)
    INNER JOIN table2 ON (table_index.id_type=3 AND table_index.id_element = table2.id)
    INNER JOIN table3 ON (table_index.id_type=4 AND table_index.id_element = table3.id)
    INNER JOIN table4 ON (table_index.id_type=5 AND table_index.id_element = table4.id)
    ORDER BY table1.date, table2.date, table3.date, table4.date DESC;

  2. #2
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Si j'ai bien compris, un élément (id_element) ne peut être présent que dans une seule des 4 tables à la fois ?
    Dans ce cas, ta jointure ne retourne jamais rien, puisque tu cherche des éléments présent dans les 4 tables à la fois.

    Dans ce cas, il faut prendre la jointure externe, et faire le tri sur la date qui est non NULL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT table_index.id, id_type, id_element, table1.nom, table1.date, table2.nom, table2.date, table3.nom, table3.date, table4.nom, table4.date FROM table_index
    LEFT JOIN table1 ON (table_index.id_type=2 AND table_index.id_element = table1.id)
    LEFT JOIN table2 ON (table_index.id_type=3 AND table_index.id_element = table2.id)
    LEFT JOIN table3 ON (table_index.id_type=4 AND table_index.id_element = table3.id)
    LEFT JOIN table4 ON (table_index.id_type=5 AND table_index.id_element = table4.id)
    ORDER BY COALESCE(table1.date, table2.date, table3.date, table4.date) DESC;

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 95
    Points : 42
    Points
    42
    Par défaut
    Ouah

    C'est exactement le résultat souhaité !
    Perso, COALESCE, je ne connaissait pas du tout, c'est puissant...

    Merci beaucoup

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 7
    Points : 6
    Points
    6
    Par défaut jointure entre 5 table Recherche :
    bonjour tt le monde: svp

    j'ai 5 table :
    RC_PP, INSCR, PORTE_S, COMPAYS, RAD_INS

    je ve trouver les enregistrement des champs :
    NPP_F, AL_INS_F, NRC, C_ACTIV, LCOM_F

    qui ce trouve ds les 5 table, sans les enregistrement qui existe dans la table RAD_INS

    j'ai fé comme suit mais ca ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT NPP_F, AL_INS_F, NRC, C_ACTIV
    FROM RC_PP, INSCR, PORTE_S, COMPAYS, RAD_INS
    WHERE C_ACTIV LIKE '%601301%' 
    AND RC_PP.NRC_PP = INSCR.NRC 
    AND PORTE_S.C_INSC= INSCR.C_INSC
    AND COMPAYS.C_COM = INSCR.C_REG
    AND INSCR.C_INSC = RAD_INS.C_INSC
    AND INSCR.C_INSC NOT EXISTS IN RAD_INS.C_INSC
    merci pour votre aide d'avance.

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

Discussions similaires

  1. [MySQL] MySql: jointure de tables pour maillage interne
    Par amdawb dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 23/11/2014, 22h39
  2. MySQL : jointure de tables
    Par rockingstone dans le forum Requêtes
    Réponses: 3
    Dernier message: 18/07/2006, 14h16
  3. Jointure de tables sur 2 base MySQL, si poussible??
    Par nerik38 dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/11/2005, 20h12
  4. [MySQL] Jointure sur une table déjà jointe
    Par genova dans le forum Requêtes
    Réponses: 3
    Dernier message: 18/10/2005, 23h54
  5. [MySQL] - jointure de tables
    Par yelbied dans le forum Requêtes
    Réponses: 7
    Dernier message: 12/10/2005, 17h34

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