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 :

Oracle : Jointure externe


Sujet :

Oracle

  1. #1
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut Oracle : Jointure externe
    Bonjour,

    J'ai un problème avec une jointure externe...
    je fais dans ma requête SQL sous Oracle un count par magasin..
    quand il n'y a pas de données pour un magasin, je veux qu'il m'affiche 0 au lieu de ne rien mettre.
    J'ai donc fait une jointure externe.
    Mais cela ne fonctionne pas apparemment.
    Quelqu'un aurait il une autre solution?

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Si tu donnais la description de tes tables et ta requête, cela serait plus facile de t'aider...

  3. #3
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Tu dois avoir dans ta clause where un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Table1.lien = Table2.lien
    qui tu remplaces par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Tablie1.lien = Table2.lien(+)
    et dans ton select tu places un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      SELECT NVL(MaColonneQuiDoitEtreA0SiNull,0)
    Bien sur tout ceci est de specifique Oracle et tu peux aussi utiliser
    le OUTER JOIN et le COALESCE

    Voila, mais comme le dit Mediat, sans descriptif et sans informations complementaires, ont ne peut pas faire grand chose.

    J'espere que ca peut t'aider
    Bon courage

  4. #4
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut
    Voici ma requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select idmag, count(idpers)
    from tpers, tmag 
    where magrtt(+)= decode(length(idmag),2,'100'||idmag,3,'10'||idmag,1,'1000'||idmag,4,'1'||idmag)
    groupby idmag
    
    et voici la description des tables:

    Table Tpers:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    idpers varchar2(10)
    title  varchar2(3)
    sexe varchar2(1)
    prenom varchar2(50)
    nom   varchar2(50)
    magrtt varchar2(15)
    table tmag
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    idmag number(5)
    nom   varchar2(100)
    region number(2)

  5. #5
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Table1.lien = Table2.lien
    qui tu remplaces par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Tablie1.lien = Table2.lien(+)
    et dans ton select tu places un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      SELECT NVL(MaColonneQuiDoitEtreA0SiNull,0)
    j'ai utilisé ce système mais je ne vois pas apparaitre .

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Je viens d'essayer ta requête : elle fonctionne très bien !!!!

  7. #7
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Je confirme ce qu'a dit Mediat, elle fonctionne
    Quelle est ta version d'Oracle ??

  8. #8
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut
    Pourtant moi j'ai 3 magasins qui n'apparaissent pas car il n'y a aucune donnée...
    bon je vais continuer à chercher...

  9. #9
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    donnes nous les scripts d'insertion de tes tables, ca peut nous aider a t'aider

  10. #10
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut
    Pardon je n'avais pas vu ta question.
    Ma version d'oracle est la dernière...10i?

  11. #11
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 922
    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 : 21 922
    Points : 51 715
    Points
    51 715
    Billets dans le blog
    6
    Par défaut
    Faîtes plutôt des LEFT OUTER JOIN. La syntaxe à base de (+)= n'est ni normative (c'est pas du SQL, mais du oracle) ni complète (ne fonctionne pas toujours de la même manière que la norme).

    Voici une syntaxe correcte en SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select idmag, COALESCE(count(idpers), 0) AS N
    from   tpers AS P
           LEFT OUTER JOIN tmag as M
                ON P.magrtt = decode(length(M.idmag),2,'100'||M.idmag,3,'10'||M.idmag,1,'1000'||M.idmag,4,'1'||M.idmag)
    group  by M.idmag
    A +

  12. #12
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut
    je n'ai toujours rien, je ne comprends pas

  13. #13
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Citation Envoyé par SQLpro
    Faîtes plutôt des LEFT OUTER JOIN. La syntaxe à base de (+)= n'est ni normative (c'est pas du SQL, mais du oracle) ni complète (ne fonctionne pas toujours de la même manière que la norme).
    En même temps, les requêtes en LEFT OUTER JOIN ne sont tolérées que depuis la version 9 d'Oracle... (A mon grand damne d'ailleurs)

  14. #14
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut
    si je veux lier une troisième table à ma première table tpers.
    comment puis je faire?
    liaison normal?

  15. #15
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut
    Je dois faire comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <div style="text-align: left;">select idmag, COALESCE(count(idpers), 0) AS N
    from   tpers AS P
           LEFT OUTER JOIN tmag as M
                ON P.magrtt = decode(length(M.idmag),2,'100'||M.idmag,3,'10'||M.idmag,1,'1000'||M.idmag,4,'1'||M.idmag)
          INNER JOIN tacht A 
          ON p.idpers = a.pers
    group  by M.idmag</div>
    est ce la bonne syntaxe?

  16. #16
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut
    c'est bon, j'ai fini par trouver la bonne syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select idmag, COALESCE(count(idpers), 0) AS N
    from  (( tpers AS P
           INNER JOIN tacht A 
          ON p.idpers = a.pers)
           LEFT OUTER JOIN tmag as M
                ON P.magrtt = decode(length(M.idmag),2,'100'||M.idmag,3,'10'||M.idmag,1,'1000'||M.idmag,4,'1'||M.idmag))
    group  by M.idmag
    Merci pour votre aide!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Oracle] Tris sur des jointure externes
    Par roychris dans le forum Langage SQL
    Réponses: 6
    Dernier message: 28/04/2006, 06h25
  2. [Oracle 8] Jointure externe multiple et valeurs nulles !!!
    Par nsonnier dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/03/2006, 23h22
  3. [Oracle 8i] Jointures externes des 2 côtés
    Par yAnSoLo82 dans le forum Oracle
    Réponses: 4
    Dernier message: 23/12/2005, 12h23
  4. Réponses: 2
    Dernier message: 22/04/2005, 17h44
  5. Réponses: 6
    Dernier message: 20/09/2004, 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