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 :

Jointure full outer join


Sujet :

Langage SQL

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Par défaut Jointure full outer join
    Salut, mon objectif dans cette requete est d'afficher tous les champs qui existent dans les deux tabes (les champs communs) ansi que les champs non communs qui existe dans une table et ils n'existent pas dans l'autre table.

    voila ma requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /* Formatted on 2008/09/03 15:28 (Formatter Plus v4.8.7) */
    SELECT a.code_compte, nvl(libelle_compte,0), nvl(a.brut,0), nvl(a.amort_provis, 0), nvl(a.net,0)
      FROM  cbl.plan_compte b full outer join cbl.data_plan_compte a
      on a.code_compte = b.code_compte and  b.code_modele = a.code_modele
     
      where b.code_pere = 1
      AND a.code_societe= 8 
      and a.date_arrete= to_date('31/12/2004','dd/mm/yyyy') 
      and a.code_modele=2 
      ORDER BY a.code_compte, libelle_compte
    j'ai consulté ce lien http://sqlpro.developpez.com/cours/s...ointures/#LIIImais sans resultat !

    voila le resultat de la table plan_compte b
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    BILAN CODE_COMPTE NVL(LIBELLE_COMPTE,0) 
    BILAN / CPC 11 IMMOBILISATION EN NV (21) 
    BILAN / CPC 22 IMMOBILISATIONS INCORPORELLES (22) 
    BILAN / CPC 23 IMMOBILISATIONS CORPORELLES (23) 
    BILAN / CPC 24 IMMOBILISATIONS FINANCIERES (24) 
    BILAN / CPC 27 ECARTS DE CONVERSION -ACTIF (27) 
    BILAN / CPC 28 AMORTISSEMENTS DES IMMOBILISATIONS (28) 
    BILAN / CPC 29 PROVISIONS POUR DEPRECIATION DES IMMOBILISATIONS (29) 
    BILAN / CPC 31 STOCKS (31) 
    BILAN / CPC 34 CREANCES DE L'ACTIF CIRCULANT (34) 
    BILAN / CPC 35 TITRES VALEURS DE PLACEMENT (35) 
    BILAN / CPC 37 ECARTS DE CONVERSION-ACTIF (ELEMENTS CIRCULANTS) (37) 
    BILAN / CPC 39 PROVISIONS POUR DEPRECIATION DES COMPTES DE L'ACTIF CIRCULANT (39) 
    BILAN / CPC 51 TRESORERIE-ACTIF (51)
    nombre de colonne = 13

    et voiola le resultat de la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CODE_COMPTE NVL(LIBELLE_COMPTE,0) NVL(A.BRUT,0) NVL(A.AMORT_PROVIS,0) NVL(A.NET,0) 
    11 IMMOBILISATION EN NV (21) 0 0 632634196,05 
    22 IMMOBILISATIONS INCORPORELLES (22) 140000 0 140000 
    23 IMMOBILISATIONS CORPORELLES (23) 291002798,01 148886420,72 142116377,29 
    24 IMMOBILISATIONS FINANCIERES (24) 120282205 1133250,65 119148954,35 
    27 ECARTS DE CONVERSION -ACTIF (27) 0 0 0 
    31 STOCKS (31) 78702490,09 9548996,15 69153493,94 
    34 CREANCES DE L'ACTIF CIRCULANT (34) 220201058,53 600852,79 219600205,74 
    35 TITRES VALEURS DE PLACEMENT (35) 187269741,04 0 187269741,04 
    37 ECARTS DE CONVERSION-ACTIF (ELEMENTS CIRCULANTS) (37) 215,92 0 215,92 
    51 TRESORERIE-ACTIF (51) 45175715,4 0 45175715,4
    nombre de colonne = 10

    Merci

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonsoir,

    Tu as essayé le CROSS JOIN, cela permet d'obtenir un produit cartésien !

    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    LEFT OUTER JOIN

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    @Chtulus, Mercure : on parle de FULL OUTER JOIN, pourquoi venez-vous embrouiller le truc avec d'autres types de jointures ?

    @opensource : Merci de préciser

    - que c'est de l'Oracle

    - ce que tu entends par "champ" et par "colonne"... mon petit doigt me souffle que "champ" veut dire colonne et que "colonne" veut dire "ligne", mais je suis preneur de confirmation

    - en quoi le résultat que tu obtiens ne te satisfait pas

    @Chtulus : on parie que la réponse finale sera qu'il manque des OR ... IS NULL dans le WHERE ?

  5. #5
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonjour tout le monde,

    tous les champs qui existent dans les deux tabes (les champs communs) ansi que les champs non communs qui existe dans une table et ils n'existent pas dans l'autre table.
    Ben je pensais qu'un CROSS JOIN résolver l'affaire

    @Antoun : Bien vu, je suis déjà plus en forme ce matin... Tout s'explique !!!

    Bonne journée !
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  6. #6
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Par défaut
    Bonjour, je parle de Oracle 10g
    Oui pour la colonne est le champs oui je veux dire plutot nombre de ligne = 10 / 13
    pour cross joint n'a pas resolu le probleme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /* Formatted on 2008/09/03 15:28 (Formatter Plus v4.8.7) */
    SELECT a.code_compte, nvl(libelle_compte,0), nvl(a.brut,0), nvl(a.amort_provis, 0), nvl(a.net,0)
      FROM  cbl.plan_compte b cross join cbl.data_plan_compte a
      where a.code_compte = b.code_compte and  b.code_modele = a.code_modele
      and b.code_pere = 1
      AND a.code_societe= 8 
      and a.date_arrete= to_date('31/12/2004','dd/mm/yyyy') 
      and a.code_modele=2 
      ORDER BY a.code_compte, libelle_compte
    le resultat que j'attend et que je recherche est d'avoir tous les enregistrements de la table plan_compte b

    et comme si signalé par Antoun on parle de la jointure full outer join

    je sais pas alors comment je peux resoudre ce probleme !!

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    Citation Envoyé par opensource Voir le message
    le resultat que j'attend et que je recherche est d'avoir tous les enregistrements de la table plan_compte b
    Dans ce cas, Mercure a raison, c'est un LEFT OUTER JOIN.

    Ton problème vient de ce que tes conditions sur la table facultative (donc sur a) excluent le NULL. Ton WHERE te fait donc perdre les 3 lignes en plus lignes que le LEFT JOIN a préservées.

    La solution est de modifier les conditions pour qu'elles acceptent le NULL, et de passer la condition de jointure en ON :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT a.code_compte, nvl(libelle_compte,0), nvl(a.brut,0), 
      nvl(a.amort_provis, 0), nvl(a.net,0)
    FROM  cbl.plan_compte b 
      LEFT OUTER JOIN cbl.data_plan_compte a 
        ON a.code_compte = b.code_compte AND b.code_modele = a.code_modele
    WHERE b.code_pere = 1
      AND (a.code_societe = 8 
        AND a.date_arrete = to_date('31/12/2004','dd/mm/yyyy') 
        AND a.code_modele = 2 
        OR a.code_societe IS NULL AND a.date_arrete IS NULL AND a.code_modele
    )
    ORDER BY a.code_compte, libelle_compte

  8. #8
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Par défaut
    Merci, elle est proche de la solution, Merci

  9. #9
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    ?

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    Citation Envoyé par Antoun
    Mercure a raison, c'est un LEFT OUTER JOIN.
    C'est pour ça que j'embrouille...

  11. #11
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonsoir à tous,

    @Antoun: Pas besoin de te redire ce qui à déjà était dis sur...[Règles, et je suis qu'une petite bestiole d'ailleur merci pour le
    fhtagn!
    C'est presque ça !!!
    @Mercure: Bienvenu au club... Je me sens moins seul

    @opensource
    Merci, elle est proche de la solution, Merci
    Tu entends quoi exactement par proche ???
    Tu as la solution à ton problème ou pas...? Je pense qu'Antoun a répondu à tes exigences ou alors tu n'as pas tout dis !

    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  12. #12
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    Citation Envoyé par Mercure Voir le message
    C'est pour ça que j'embrouille...
    désolé !
    j'étais si content d'avoir un vrai problème de FULL JOIN

  13. #13
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    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 136
    Par défaut
    Tu peux aussi passer la condition dans la jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT a.code_compte, nvl(libelle_compte,0), nvl(a.brut,0), 
      nvl(a.amort_provis, 0), nvl(a.net,0)
    FROM  cbl.plan_compte b 
      LEFT OUTER JOIN cbl.data_plan_compte a 
        ON a.code_compte = b.code_compte AND b.code_modele = a.code_modele
        AND a.code_societe = 8 
        AND a.date_arrete = to_date('31/12/2004','dd/mm/yyyy') 
        AND a.code_modele = 2 
    WHERE b.code_pere = 1
      
    ORDER BY a.code_compte, libelle_compte
    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.

  14. #14
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    salut Al1 !

    tu as raison, c'est bcp plus élégant comme ça !

  15. #15
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    On peut aussi utiliser COALESCE (NVL en Oracle, mais je crois qu'Oracle s'y est enfin mis au coalesce) dans le WHERE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT a.code_compte, COALESCE(libelle_compte,0), 
           COALESCE(a.brut,0), COALESCE(a.amort_provis, 0), 
           COALESCE(a.net,0)
    FROM   cbl.plan_compte b 
           LEFT OUTER JOIN cbl.data_plan_compte a 
                ON a.code_compte = b.code_compte AND b.code_modele = a.code_modele
    WHERE  b.code_pere = 1
      AND  COALESCE(a.code_societe, 8) = 8 
      AND  COALESCE(a.date_arrete, to_date('31/12/2004','dd/mm/yyyy')) = to_date('31/12/2004','dd/mm/yyyy') 
      AND  COALESCE(a.code_modele, 2) = 2
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  16. #16
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    Oracle s'est mis au COALESCE depuis la version 9i.

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