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

Contribuez MySQL Discussion :

Simuler le comportement d'un FULL OUTER JOIN


Sujet :

Contribuez MySQL

  1. #1
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut Simuler le comportement d'un FULL OUTER JOIN
    Bonjour,

    Je vous propose un nouvel élément à utiliser : Simuler le comportement d'un FULL OUTER JOIN

    MySQL autorise les jointures externes à gauche (LEFT [OUTER] JOIN) et à droite (RIGHT [OUTER] JOIN), mais pas la jointure externe totale. Cette jointure ramène toutes les valeurs des tables jointes, complétant les colonnes de l'une par NULL quand il n'y a pas de correspondance avec l'autre table.

    Supposons que nous ayons les deux tables suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE  tableA (
      id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
      nom varchar(45) NOT NULL,
      PRIMARY KEY  (id)
    );
     
    CREATE TABLE  tableB (
      id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
      nom varchar(45) NOT NULL,
      PRIMARY KEY  (id)
    );

    Et le jeu de données suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO tableA (nom)
    VALUES ('1'), ('2'), ('4'), ('5'), ('6'), ('6'), ('8');
     
    INSERT INTO tableB (nom)
    VALUES ('1'), ('3'), ('4'), ('4'), ('7'), ('7'), ('8');
    On souhaite obtenir toutes les lignes des tables A et B ayant un nom identique, ainsi que les lignes de A sans nom équivalent dans B et les lignes de B sans nom équivalent dans A.

    On peut alors exécuter la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT a.nom, b.nom
    FROM tableA a
    LEFT OUTER JOIN tableB b ON a.nom = b.nom
    UNION ALL
    SELECT a.nom, b.nom
    FROM tableA a
    RIGHT OUTER JOIN tableB b ON a.nom = b.nom
    WHERE a.nom IS NULL
    Cette requête suppose que la version de MySQL supporte la clause UNION (MySQL version 4.0 minimum).

    Qu'en pensez-vous ?
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  2. #2
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    c'est sympa d'avoir une jointure externe totale mais je vois pas quand on peut l'utiliser ET union est tellement pas pratique à utiliser que je n'utiliserai pas ça.

    J'ai l'impression qu'un enchainement judicieux d'outer join ferait la même chose. Est ce que j'ai tord?

    genre t1 LEFT JOIN t2 RIGHT JOIN t2...
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  3. #3
    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,

    Non, c'est différent à chaque fois que la relation entre A et B n'est pas 1 - 1
    (Le right join, c'est avant tout un joint donc tu vas démultiplier toutes tes lignes)

    (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/

Discussions similaires

  1. L'équivalent de FULL OUTER JOIN sous ACCESS
    Par Le Pharaon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/03/2013, 12h36
  2. Erreur FULL OUTER JOIN
    Par SwiTz dans le forum Requêtes
    Réponses: 14
    Dernier message: 02/04/2009, 13h33
  3. [Oracle 9] Probleme. FULL OUTER JOIN
    Par West01 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/10/2006, 07h46
  4. [ORACLE 9i] Equivalent du Full Outer Join
    Par Worldofdada dans le forum Oracle
    Réponses: 10
    Dernier message: 02/11/2005, 14h56
  5. Remplacer FULL OUTER JOIN
    Par funrighd dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/07/2004, 10h54

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