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 :

LEFT OUTER JOIN avec trois tables


Sujet :

Requêtes MySQL

  1. #1
    Membre averti Avatar de Space Cowboy
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2005
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Avril 2005
    Messages : 496
    Points : 401
    Points
    401
    Par défaut LEFT OUTER JOIN avec trois tables
    Bonjour, je cherche à faire une requête, je vous donne une image pour faire simple :


    Le code MySQL :
    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
    CREATE TABLE `table_1` (
    `table_1_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `table_1_nom` VARCHAR( 512 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
    ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_bin;
     
    INSERT INTO `table_1` ( `table_1_id` , `table_1_nom` ) VALUES ( NULL , 'Machin' );
    INSERT INTO `table_1` ( `table_1_id` , `table_1_nom` ) VALUES ( NULL , 'Truc' );
    INSERT INTO `table_1` ( `table_1_id` , `table_1_nom` ) VALUES ( NULL , 'Bidule' );
    INSERT INTO `table_1` ( `table_1_id` , `table_1_nom` ) VALUES ( NULL , 'Chose' );
     
     
    CREATE TABLE `table_2` (
    `table_2_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `table_2_mac` VARCHAR( 512 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
    ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_bin;
     
    INSERT INTO `table_2` ( `table_2_id` , `table_2_mac` ) VALUES ( NULL , 'fr:3q:9o:zj:hb:3:d2' );
    INSERT INTO `table_2` ( `table_2_id` , `table_2_mac` ) VALUES ( NULL , 'vc:21:1d:pm:dc:1q:fv' );
     
     
     
    CREATE TABLE `table_3` (
    `table_3_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `table_3_ip` VARCHAR( 512 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
    ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_bin;
     
    INSERT INTO `table_3` ( `table_3_id` , `table_3_ip` ) VALUES ( NULL , '192.168.0.1' );
    INSERT INTO `table_3` ( `table_3_id` , `table_3_ip` ) VALUES ( NULL , '192.168.0.2' );
    INSERT INTO `table_3` ( `table_3_id` , `table_3_ip` ) VALUES ( NULL , '192.168.0.3' );
    INSERT INTO `table_3` ( `table_3_id` , `table_3_ip` ) VALUES ( NULL , '10.0.0.4' );
    INSERT INTO `table_3` ( `table_3_id` , `table_3_ip` ) VALUES ( NULL , '10.0.0.2' );
    INSERT INTO `table_3` ( `table_3_id` , `table_3_ip` ) VALUES ( NULL , '172.16.3.1' );




    Ca aurait du être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT *
    FROM `table_1`
    LEFT OUTEr
      JOIN `table_2`
        ON table_1_id = table_2_id  
    LEFT OUTEr
      JOIN `table_3`
        ON table_2_id = table_3_id
    Le résultat de cette requête :

    Mais apparament il ne prend que les ID de la première colonne alors qu'il me les faut tous.

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    tous tes id se trouve dans la table3?

    si oui, comme c'est le cas dans ton exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT table_3_id,table_1_nom,table_2_mac,table_3_ip
    FROM table_3
    LEFT OUTER
      JOIN table_1
        ON table_3_id = table_1_id  
    LEFT OUTER
      JOIN table_2
        ON table_3_id = table_2_id

  3. #3
    Membre averti Avatar de Space Cowboy
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2005
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Avril 2005
    Messages : 496
    Points : 401
    Points
    401
    Par défaut
    Ben justement, ca n'est pas toujours le cas.

  4. #4
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    il te faudrait une table où tu as tous tes id
    le but de la jointure externe est de ramener des lignes même s'il n'y a pas de correspondance dans l'autre table mais il faut donc bien une table ou tu auras tous tes ordinateurs de recencés

  5. #5
    Membre averti Avatar de Space Cowboy
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2005
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Avril 2005
    Messages : 496
    Points : 401
    Points
    401
    Par défaut
    Mais il y a la théorie et le réel donc j'ai trois sources.
    Il est possible d'avoir tous les ID avec un SELECT sur les trois tables.

  6. #6
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    une idée comme cela mais ce n'est peut etre pas la meilleure : ne peux tu pas faire une table temporaire sur laquelle tu recupere tous tes id puis faire les jointures externes à partir de cette table?

    A tester mais je sais pas ce que ca donne niveau perf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select id,table_1_nom,table_2_mac,table_3_ip 
    from (select table_1_id as id from table_1 union select table_2_id as id from table_2 union select table_3_id as id from table_3) derive
    left join table_1 on derive.id=table_1_id 
    left join table_2 on derive.id=table_2_id 
    left join table_3 on derive.id=table_3_id

  7. #7
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM Table1 t1
    FULL OUTER JOIN Table2 t2 ON t1.table1_id = t2.table2_id
    FULL OUTER JOIN Table3 t3 ON t1.table1_id = t3.table3_id
    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 !

  8. #8
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    A Cinephil, il me semble que full outer join n'existe pas sous MySQL (je dis peut etre une betise)

  9. #9
    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
    Citation Envoyé par Cybher Voir le message
    A Cinephil, il me semble que full outer join n'existe pas sous MySQL (je dis peut etre une betise)
    Exact !
    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. LEFT OUTER JOIN avec requete imbriquée ?
    Par disciplined dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/07/2010, 18h50
  2. Réponses: 9
    Dernier message: 16/10/2009, 10h07
  3. Problème de left outer join avec Ibatis
    Par sarsipius dans le forum JDBC
    Réponses: 1
    Dernier message: 28/02/2008, 14h51
  4. left outer join avec condition
    Par fisto dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 14/08/2007, 08h52
  5. Réponses: 6
    Dernier message: 06/10/2006, 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