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 :

la jointure gauche et droite entre deux table


Sujet :

SQL Oracle

  1. #1
    Débutant
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Points : 132
    Points
    132
    Par défaut la jointure gauche et droite entre deux table
    bsr, mon objectif dans la requete est d'afficher tous les ratios et societe et valeur des ratios,
    voila la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /* Formatted on 2008/04/03 18:06 (Formatter Plus v4.8.7) */
    SELECT   a.code_ratios, s.libelle_court, NVL (a.valeur, '0,00')
        FROM cbl.data_ratios a, cbl.ratios r, cbl.societe s
       WHERE TRIM (a.code_ratios) = TRIM (r.code)
         AND r.flag_actif = 'O'
         AND TRIM (s.libelle_court) = TRIM (a.code_societe)
         AND a.code_modele = 1
         AND a.date_ratios BETWEEN TO_DATE ('28/04/2000', 'dd/mm/yyyy')
                               AND TO_DATE ('29/04/2008', 'dd/mm/yyyy')
         AND a.code_societe IN ('COL', 'BRSR', 'DARI', 'FBR')
    ORDER BY a.code_ratios ASC, a.code_societe ASC
    mon probleme est je veux afficher
    affecter les valeurs null pour la valeur de ratio pour les enregistrements qui n'existe pas dans la table cbl.data_ratios
    je sais que c'est une jointure avec (+), mais j'ai pas assez de bagage pour savoir comment?

    est ce que la jointure gauche/ droite
    sachant que je travail avec oracle 10g et sql navigator

    le but est d'afficher les enregistrements commun et non commun entre les tables

  2. #2
    Débutant
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Points : 132
    Points
    132
    Par défaut
    aucun aide??

  3. #3
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    pourquoi (+) alors que tu peux utiliser RIGHT/LEFT JOIN ?

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Citation Envoyé par opensource Voir le message
    aucun aide??
    Citation Envoyé par opensource Voir le message
    je sais que c'est une jointure avec (+), mais j'ai pas assez de bagage pour savoir comment?
    et la doc et des tests en nous donnant les résultats obtenus et ce qui ne te convient pas, c'est pas plus intelligent que de râler ?

  5. #5
    Débutant
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Points : 132
    Points
    132
    Par défaut
    j'ai consulter la doc http://sql.developpez.com/sqlaz/jointures/
    sur les jointures, j'ai pas resté croisé les bras
    mais j'ai pas tres bien compris l'astuce

  6. #6
    Débutant
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Points : 132
    Points
    132
    Par défaut
    voila la table date ratios
    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
    34
    35
    36
    37
    38
    39
    40
    INSERT INTO cbl.data_ratios
    VALUES
    (1,'bq','ONA','DIMANCHE 1 JANVIER 2006',1921120)
    /
    INSERT INTO cbl.data_ratios
    VALUES
    (1,'bq','BRSR','DIMANCHE 31 DÉCEMBRE 2000',243900785,1)
    /
    INSERT INTO cbl.data_ratios
    VALUES
    (1,'bq','BER','DIMANCHE 31 DÉCEMBRE 2006',6919285,72)
    /
    INSERT INTO cbl.data_ratios
    VALUES
    (2,'Assurance','CIH','SAMEDI 10 MARS 2007',888888)
    /
    INSERT INTO cbl.data_ratios
    VALUES
    (1,'bq','COL','DIMANCHE 31 DÉCEMBRE 2000',0)
    /
    INSERT INTO cbl.data_ratios
    VALUES
    (1,'bq','BNM','DIMANCHE 31 DÉCEMBRE 2000',21906673,96)
    /
    INSERT INTO cbl.data_ratios
    VALUES
    (1,'bq','CLT','DIMANCHE 31 DÉCEMBRE 2000',188880625,5)
    /
    INSERT INTO cbl.data_ratios
    VALUES
    (2,'QQQ','ATW','MERCREDI 21 NOVEMBRE 2007',1201921)
    /
    INSERT INTO cbl.data_ratios
    VALUES
    (2,'Assurance','ATW','DIMANCHE 19 FÉVRIER 2006',10)
    /
    INSERT INTO cbl.data_ratios
    VALUES
    (1,' New Assurance','ONA','JEUDI 21 DÉCEMBRE 2006',10)
    /
    voila la table ratio
    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
    INSERT INTO cbl.ratios
    VALUES
    (1,' CA/ CP+CA','CA / CP + CA',':343:+:211:/:231:','Personnel+Frais préliminaires/Terrains','O')
    /
    INSERT INTO cbl.ratios
    VALUES
    (1,' New Assurance','New Assurance',':272:*:42:','Augmentation des dettes financières*ECARTS DE CONVERSION-ACTIF','O')
    /
    INSERT INTO cbl.ratios
    VALUES
    (1,' CP / CP + DLT','CP / CP +DLT',':1482:+:114:*:552:*3.5','Avances de l''Etat+Réserve légale*Crédits d''escompte*3.5','O')
    /
    INSERT INTO cbl.ratios
    VALUES
    (2,' QQQ','QQQ',':345:+:211:','Comptes d''associés+Frais préliminaires','O')
    /
    INSERT INTO cbl.ratios
    VALUES
    (2,' Assurance','Assurance',':343:+:370:*:211:','Personnel+Eléments circulants*Frais préliminaires','O')
    /
    INSERT INTO cbl.ratios
    VALUES
    (1,' bq','Const + Const',':232:+:232:','Constructions+Constructions','O')
    /
    INSERT INTO cbl.ratios
    VALUES
    (1,' ty','BFR / FRN',':231:+:232:','Terrains+Constructions','N')
    /
    et voila la table societe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT a.code_pays, a.code_secteur, a.code_modele, a.code,
           a.libelle_court, a.libelle_long
      FROM cbl.societe a
    et la requete est la precedente

  7. #7
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Citation Envoyé par opensource Voir le message
    j'ai consulter la doc http://sql.developpez.com/sqlaz/jointures/
    sur les jointures, j'ai pas resté croisé les bras
    mais j'ai pas tres bien compris l'astuce
    C'est pourtant clair avec les exemples : http://sql.developpez.com/sqlaz/jointures/#L2.3

    T'as plus qu'à tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT   a.code_ratios, s.libelle_court, NVL (a.valeur, '0,00')
        FROM cbl.data_ratios a RIGHT OUTER JOIN cbl.ratios r 
                    ON TRIM (a.code_ratios) = TRIM (r.code)
                , cbl.societe s
       WHERE r.flag_actif = 'O'
         AND TRIM (s.libelle_court) = TRIM (a.code_societe)
         AND a.code_modele = 1
         AND a.date_ratios BETWEEN TO_DATE ('28/04/2000', 'dd/mm/yyyy')
                               AND TO_DATE ('29/04/2008', 'dd/mm/yyyy')
         AND a.code_societe IN ('COL', 'BRSR', 'DARI', 'FBR')
    ORDER BY a.code_ratios ASC, a.code_societe ASC
    Ensuite avec le LEFT et ça devrait te permettre de lever les derniers doutes.

    Si tu as une question plus précise, n'hésite pas à la poser

  8. #8
    Débutant
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Points : 132
    Points
    132
    Par défaut
    il ramene toujours le meme resultat
    meme si avec left outer joint et meme avec full join
    Merci

  9. #9
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    bah si la correspondance des lignes est toujours possible la jointure externe ne sert à rien

Discussions similaires

  1. Jointure entre deux tables ?
    Par spirit69 dans le forum Access
    Réponses: 2
    Dernier message: 05/12/2006, 20h21
  2. jointure entre deux tables mysql
    Par Invité dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 23/04/2006, 20h08
  3. [MySQL] Jointure entre deux tables
    Par Flushovsky dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 03/10/2005, 18h55
  4. PROBLEME DE JOINTURE ENTRE DEUX TABLE
    Par DarkMax dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/01/2005, 15h11
  5. Jointure entre deux tables et résultat
    Par Asdorve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2004, 14h50

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