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 :

requete avec double jointure externe


Sujet :

Langage SQL

  1. #1
    cdu
    cdu est déconnecté
    Membre actif
    Profil pro
    Inscrit en
    Août 2004
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 196
    Points : 222
    Points
    222
    Par défaut requete avec double jointure externe
    Bonjour et meilleurs voeux à tous,

    je fais appel à vous car j'ai une syntaxe qui m'échappe.
    pour commencer l'exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select table1.champ1,
            nvl(table2.champ4,table1.champ4)
    from table1,table2
    where  table1.champ2=table2.champ2(+)
        and table1.champ3=table2.champ3(+)
    il peut n'y avoir aucun enregistrement correspondant dans la table 2 d'où la jointure externe, mais si il y en a, ils doivent répondre aux 2 clauses where.
    Or dans ma syntaxe actuelle, ils peuvent répondre à l'une ou à l'autre.

    Je pense pas que ce soit le bout du monde, mais je ne vois pas...

    merci pour votre aide

  2. #2
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Il ne faut pas utiliser cette syntaxe mais plutot:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select table1.champ1,
            nvl(table2.champ4,table1.champ4)
    from table1 LEFT OUTER JOIN table2 ON  table1.champ2=table2.champ2   and table1.champ3=table2.champ3
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  3. #3
    cdu
    cdu est déconnecté
    Membre actif
    Profil pro
    Inscrit en
    Août 2004
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 196
    Points : 222
    Points
    222
    Par défaut
    merci pour ta réponse rapide,
    je viens de tester ta syntaxe et ça ne semble pas passer
    j'utilise sqlplus vers une base oracle 9
    il s'arrete sur la ligne du avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-00933: SQL command not properly ended
    je ne sais pas trop comment l'interpréter

  4. #4
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Peux tu me donner ta requete exacte (je suppose que table 1 et 2 c'est pour l'exemple.
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  5. #5
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    create table table1 (champ1 varchar(10),champ2 varchar(10), champ3 varchar(10), champ4 varchar(10))
    create table table2 (champ1 varchar(10),champ2 varchar(10), champ3 varchar(10), champ4 varchar(10))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SQL> insert into table1 values ('1','2','3','Table1');
    SQL>  insert into table1 values ('1','3','3','Table1');
    SQL> insert into table1 values ('1','3','4','Table1');
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SQL> insert into table2 values ('1','3','4','Table2');
    SQL> insert into table2 values ('1','5','4','Table2');
    et enfin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      1   select table1.champ1 as champ1,
      2        nvl(table2.champ4,table1.champ4) as champ4
      3*    from table1 LEFT OUTER JOIN table2 ON  table1.champ2=table2.champ2   and table1.champ3=table2.champ3
    donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CHAMP1     CHAMP4
    ---------- ----------
    1          Table2
    1          Table1
    1          Table1
    Est ce que tu veux ? Sinon fait nous un exemple
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  6. #6
    cdu
    cdu est déconnecté
    Membre actif
    Profil pro
    Inscrit en
    Août 2004
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 196
    Points : 222
    Points
    222
    Par défaut
    bon, j'ai trouvé pourquoi ça ne peut pas marcher.
    j'ai testé sur deux bases et aprés vérification sur le net, le LEFT OUTER JOIN est n'est implémenté qu'à partir de oracle 9i
    et il je dois travailler sur une base oracle 8i
    http://www.praetoriate.com/oracle_tips_outer_joins.htm

    donc je reviens sur mon problème original à résoudre en 8i

  7. #7
    cdu
    cdu est déconnecté
    Membre actif
    Profil pro
    Inscrit en
    Août 2004
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 196
    Points : 222
    Points
    222
    Par défaut
    n'ayant toujours pas trouvé la solution à mon problème, je me permet de le relancer.
    merci

  8. #8
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Donnes nous un exemple de ce que tu veux parce que apparement ce n'est pas clair (enfin pour moi)
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  9. #9
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par cdu
    j'ai testé sur deux bases et aprés vérification sur le net, le LEFT OUTER JOIN est n'est implémenté qu'à partir de oracle 9i
    et il je dois travailler sur une base oracle 8i
    C'est indiqué sur Developpez aussi : http://sql.developpez.com/sqlaz/jointures/#L6

    Donc merci de faire attention en précisant la version du SGBD, de nous donner la bonne


    Merci ze_key pour le TestCase, c'est beaucoup plus facile pour aborder un problème


    Pour faire simple, tu veux une requête qui te retourne les lignes de Table 1 sans equivalence dans table 2 (jointure sur champ2 et champ3) ET ceux qui sont avec équivalence, c'est bien ça ?

    Si c'est ça, procéde en faisant 2 SELECT et en regroupant le résultat avec un UNION, je pense que c'est ce qu'il y a de plus simple.
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

Discussions similaires

  1. [Requete] Probleme avec double jointure et cast
    Par guromgd dans le forum Développement
    Réponses: 5
    Dernier message: 04/05/2009, 13h42
  2. Réponses: 4
    Dernier message: 29/06/2006, 10h11
  3. requete avec double tri
    Par noarno dans le forum Access
    Réponses: 1
    Dernier message: 15/11/2005, 16h55
  4. Doubles jointures externes....
    Par HPJ dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/11/2004, 15h28
  5. requete avec 2 jointures
    Par bissy88 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/04/2004, 13h52

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