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 :

Transformation d'une requete avec des outer join


Sujet :

Oracle

  1. #1
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 70
    Points
    70
    Par défaut Transformation d'une requete avec des outer join
    Bonjour, j'ai une requete imbriquée vraiment horrible, je fais d'abord un select sur une table, ensuite un select in sur cette table, et un troisieme select pour récupérer les colonnes dont j'ai besoin après traitement du second select et qui disparaissent a cause de lui:

    étant completement dépassé par les jointures externes, j'ai tenté au petit bonheur la chance et après avoir lu le tutoriel sur les jointures de modifier mon code pour l'arranger, mais ca ne donne que de belles erreurs!

    Mon code d'origine est celui-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select libelle cval, code_plisin code_plisin, libelle, code_place, code_valeur
    from Valeurs
    where code_valeur in (select isin
    from fininfo11
    where fininfo11.isin in 
    (select distinct V.code_valeur 
    from valeurs V, fininfo02 F
    where V.code_valeur = F.ISIN 
    and F.pl_cot_id = V.code_place 
    and F.mar_cot_id IN ('201', '202', '203','204'))
    and pl_cot_id IN ('011', '025', '027','028' ,'029' , '030', '031', '032', '038', '051')
    );

    Ca, ca me donne ce que je recherche

    J'ai tenté des jointures à droite, à gauche, mais je ne sais même pas ce que je fais, c'est vraiment par pur désespoir que je le fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT V.libelle cval, V.code_plisin code_plisin, V.libelle, V.code_place, V.code_valeur FROM valeurs V, fininfo02 F
    WHERE V.code_valeur = F.ISIN 
    and F.pl_cot_id = V.code_place 
    and F.mar_cot_id IN ('201', '202', '203','204')
    and F.pl_cot_id IN ('011', '025', '027','028' ,'029' , '030', '031', '032', '038', '051')
    right outer join fininfo11 ON
    V.code_valeur = fininfo11.ISIN

    Et ca, ca me donne:

    ORA-933 la commande ne se termine pas correctement


    Bref, j'ai tourné ca n'importe comment, j'ai vraiment essayé de reproduire les exemples du tuto, mais rien à faire, je saisi pas le fonctionnement.


    Je demande pas la solution, mais une explication de ce que je dois faire

    Merci à ceux qui ont une idée de quoi faire

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    c'est pas plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT V.libelle cval, V.code_plisin code_plisin, V.libelle, V.code_place, V.code_valeur 
    right outer join fininfo11 ON
    V.code_valeur = fininfo11.ISIN,
    INNER JOIN fininfo02 F ON
    V.code_valeur = F.ISIN and F.pl_cot_id = V.code_place 
    FROM valeurs V
    WHERE F.mar_cot_id IN ('201', '202', '203','204')
    and F.pl_cot_id IN ('011', '025', '027','028' ,'029' , '030', '031', '032', '038', '051')

  3. #3
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 70
    Points
    70
    Par défaut
    Non, cela ne fonctionne pas non plus, il me donne une erreur à cause du from...


    Mais j'ai trouvé un ordre qui me donne ce que je cherche, plus 10 tuples :S


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select distinct V.libelle cval, V.code_plisin code_plisin, V.libelle, V.code_place, V.code_valeur
                            from valeurs V, fininfo02 F, fininfo11 F11
                            where V.code_valeur = F.ISIN 
                            and F.pl_cot_id = V.code_place 
                            and F11.isin(+) = V.code_valeur
                            and F.mar_cot_id IN ('201', '202', '203','204')
                            and F.pl_cot_id IN ('011', '025', '027','028' ,'029' , '030', '031', '032', '038', '051')
                            and code_place IN ('011', '025', '027','028' ,'029' , '030', '031', '032', '038', '051')
    Cela correspond à votre avis?


    [edit] Je pense que ca marche en fait, j'ai regardé les 700 valeurs une à une, elles rentrent toutes dans les critères de sélection.

    Les jointures externes restent mystérieuses pour moi (surtout les histoires de droite gauche) mais bon, je vois à quoi ca sert au moins.

    Merci à vous

  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 : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    ça marche mais c'est n'est pas l'écriture normée... gare à une éventuelle migration sur un autre SGBD

  5. #5
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par Fred_D
    ça marche mais c'est n'est pas l'écriture normée... gare à une éventuelle migration sur un autre SGBD

    Aie aie aie, c'est prévu en plus de faire ca

    La syntaxe 'correcte' ca serait plutot quoi si c'est possible de me le dire :S

  6. #6
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 70
    Points
    70
    Par défaut
    désolé, je ne peux pas trop te dire

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

Discussions similaires

  1. [AC-2003] Requete sur une table avec des "Left Join" en parallèle
    Par Currahee dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 27/08/2009, 09h37
  2. écriture d'une requete avec des apostrophes
    Par freestyler dans le forum Delphi
    Réponses: 2
    Dernier message: 10/10/2006, 12h00
  3. [SQL] Requête dans une requête...avec des INNER JOIN!
    Par PedroBD dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 06/04/2006, 08h26
  4. [MySQL] Comparer le resultat d'une requete avec des fichiers
    Par Anakior dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/12/2005, 11h11
  5. Creer une requete avec des LEFT JOIN et des GRO
    Par donbuz dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/09/2004, 15h53

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