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

 Oracle Discussion :

Jointure externe entre trois tables (deux tables et un association)


Sujet :

Oracle

  1. #1
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 260
    Points : 43
    Points
    43
    Par défaut Jointure externe entre trois tables (deux tables et un association)
    salut les amis
    j'ai 3 tables :
    client
    dossier_client
    dossier

    et je veux faire une jointure et récupérer tout les clients même ceux qui n'ont pas de dossier (pas de dossier_client)

  2. #2
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Je te conseille de regarder les tuto sur les jointures externes.
    ~ Lola ~

  3. #3
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Il n'y a strictement aucune difficulté dans ce que tu veux faire, purement de la base en SQL...

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Je parie que les trois quarts des développeurs ne savent pas écrire cette requête.

    yous18, qu'avez-vous commencé à écrire à l'aide du tutoriel fourni par lola06 ?

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Je parie que les trois quarts des développeurs ne savent pas écrire cette requête.
    Tu y vas fort ! 75% ?

    Bon, en tout cas.. moi je sais, moi je sais
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    75% je me demande même si je ne suis pas trop optimiste !

    Ceux qui doutent, vous pouvez m'envoyer un MP.

    Pour la syntaxe :
    client (id_client, nom_client)
    dossier (id_dossier, nom dossier)
    dossier_client (id_dossier, id_client)

    Avec les PK en gras, les FK en souligné, et les index qui vont bien.

  7. #7
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Un petit jeu de test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WITH client AS (SELECT ROWNUM id_client, 'Client '|| ROWNUM nom_client FROM user_tables WHERE ROWNUM < 5),
    dossier AS (SELECT ROWNUM id_dossier, 'Dossier '|| ROWNUM nom_dossier FROM user_tables WHERE ROWNUM < 10),
    dossier_client AS (SELECT 1 id_dossier, 1 id_client FROM dual
    				UNION ALL SELECT 2, 1 FROM dual
            UNION ALL SELECT 2, 2 FROM dual
            UNION ALL SELECT 4, 4 FROM dual
            )
    SELECT ....
    Faut arriver à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ID_CLIENT	NOM_CLIENT	ID_DOSSIER	NOM_DOSSIER
    1		Client 1	1		Dossier 1
    1		Client 1	2		Dossier 2
    2		Client 2	2		Dossier 2
    3		Client 3		
    4		Client 4	4		Dossier 4
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  8. #8
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Je parie que les trois quarts des développeurs ne savent pas écrire cette requête.


    Il n'y a pas vraiment de difficultés flagrantes tout de même, juste un piège dans lequel il ne faut pas tomber

  9. #9
    Membre habitué
    Inscrit en
    Septembre 2010
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 82
    Points : 140
    Points
    140
    Par défaut
    Le gars ne sait pas, alors il demande.

    ANSI Syntax:
    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
    33
     
    WITH 
    client AS 
    (  SELECT ROWNUM AS id_client,
              'Client '|| ROWNUM AS nom_client 
         FROM all_tables 
        WHERE ROWNUM < 5
    ),
    dossier AS 
    (
      SELECT ROWNUM id_dossier,        
             'Dossier '|| ROWNUM nom_dossier 
        FROM all_tables  
       WHERE ROWNUM < 10
    ),
    dossier_client AS 
    (
    SELECT  1 AS id_dossier, 1 AS id_client FROM dual
    UNION ALL 
    SELECT 2, 1 FROM dual
    UNION ALL 
    SELECT 2, 2 FROM dual
    UNION ALL 
    SELECT 4, 4 FROM dual
    )
    -- fin données de test
    --
    -- 
    SELECT c.id_client, c.nom_client, dc.id_dossier, d.nom_dossier
      FROM client c
      LEFT JOIN dossier_client dc ON c.id_client = dc.id_client
      LEFT JOIN dossier d ON d.id_dossier = dc.id_dossier
     ORDER BY 1;

    "Vieille" syntaxe Oracle:

    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
    33
     
    WITH 
    client AS 
    (  SELECT ROWNUM AS id_client,
              'Client '|| ROWNUM AS nom_client 
         FROM all_tables 
        WHERE ROWNUM < 5
    ),
    dossier AS 
    (
      SELECT ROWNUM id_dossier,        
             'Dossier '|| ROWNUM nom_dossier 
        FROM all_tables  
       WHERE ROWNUM < 10
    ),
    dossier_client AS 
    (
    SELECT  1 AS id_dossier, 1 AS id_client FROM dual
    UNION ALL 
    SELECT 2, 1 FROM dual
    UNION ALL 
    SELECT 2, 2 FROM dual
    UNION ALL 
    SELECT 4, 4 FROM dual
    )
    -- fin données de test
    --
    -- 
    SELECT c.id_client, c.nom_client, dc.id_dossier, d.nom_dossier
      FROM client c, dossier_client dc, dossier d 
     WHERE c.id_client = dc.id_client (+)
       AND d.id_dossier(+) = dc.id_dossier 
     ORDER BY 1;

Discussions similaires

  1. jointure externe entre 3 tables
    Par yous18 dans le forum Requêtes
    Réponses: 6
    Dernier message: 18/05/2012, 09h47
  2. Problème de jointure externe entre 3 tables
    Par juju05 dans le forum SQL
    Réponses: 1
    Dernier message: 05/12/2011, 10h52
  3. Réponses: 6
    Dernier message: 30/06/2010, 14h24
  4. Jointure complete entre champs de deux tables
    Par Arnard dans le forum Requêtes
    Réponses: 3
    Dernier message: 30/03/2007, 09h33
  5. jointures externes entre plusieurs tables
    Par hacksi dans le forum Access
    Réponses: 22
    Dernier message: 15/05/2006, 16h26

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