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

SQL Oracle Discussion :

FULL OUTER JOIN sans effet ?!


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Par défaut FULL OUTER JOIN sans effet ?!
    Salut,

    j'ai 3 tables :

    UTILISATEURS ( ID, NOM, PRENOM )
    L_UTIL_MENU ( ID_UTIL, ID_MENU )
    MENUS ( ID_MENU, NOM )

    je souhaiterai faire une requete récupérants les utilisateurs et leurs menus associés ET les utilisateur sans aucun menus associés.

    j'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select u.*, m.* from l_util_menu l 
    FULL OUTER JOIN utilisateurs u on l.id_util = u.id_util
     INNER JOIN menus m on m.id_menu = l.id_menu
    Mais dans tous les cas, il me retourne jamais mes utilisateurs non présents dans L_UTIL_MENU, vous auriez une idée ?

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    C'est normal !
    C'est à cause du INNER JOIN sur menus.
    Remplace le par un RIGHT JOIN et ça marchera tout de suite mieux
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Par défaut
    Salut,

    je viens d'essayer avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select u.*, m.* from l_util_menu l 
    FULL OUTER JOIN utilisateurs u on l.id_util = u.id_util
     RIGHT JOIN menus m on m.id_menu = l.id_menu
    Y'a du mieux, sauf qu'il m'affiche juste les "MENUS" non présents dans L_util_menu.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2012
    Messages : 127
    Par défaut
    Bonjour,

    Problème de priorité des jointures. Si j'ai bien compris, vous voulez réaliser une jointure externe entre utilisateurs et le résultat d'une jointure interne entre l_util_menu et menus. Dans le code donné en exemple du premier message, les jointures sont exécutées dans l'ordre où elles sont écrites : vous réalisez d'abord une jointure externe entre l_util_menu et menus, et ensuite vous effectuez une jointure interne du résultat avec utilisateurs.

    Voici une solution, où j'ai utilisé des parenthèses pour modifier la priorité des jointures :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT u.*, m.* 
    FROM utilisateurs u
    LEFT OUTER JOIN (l_util_menu l INNER JOIN menus m on (m.id_menu = l.id_menu)) ON  (l.id_util = u.id_util)

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