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 :

Jointure externe et select in


Sujet :

SQL Oracle

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 66
    Par défaut Jointure externe et select in
    Bonsoir,

    J'ai déja rencontré plusieurs le cas suivant :

    une requête dans laquelle je place des jointures externes car je veux toujours ramener le même nombre de ligne dans tous les cas.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     select v.puissance
    from voiture v, marque m
    where v.type='1'
    and v.marque=m.code(+)
    and m.type(+)='14'
    Pour cela pas de soucis.

    Par contre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     select v.puissance
    from voiture v, marque m
    where v.type='1'
    and v.marque=m.code(+)
    and m.type(+) in ('14','15')
    ne fonctionne pas evidemment.

    Je voudrais savoir quel moyen de substitution existe ?

    Ps : je suis sous oracle 9.

    Merci

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 63
    Par défaut
    Je te propose un malheureux OR

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select v.puissance
    from voiture v, marque m
    where v.type='1'
    and v.marque=m.code(+)
    and (m.type(+) = '14' 
    OR m.type(+) = '15')

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 66
    Par défaut
    J'y avais pensé effectivement seulement oracle n'apprecie pas et ressort l'erreur suivante :


    Error: ORA-01719: outer join operator (+) not allowed in operand of OR or IN

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 63
    Par défaut
    Arf essais ca !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT v.puissance
    FROM voiture v, marque m
    WHERE v.type='1'
    AND v.marque=m.code(+)
    AND m.type(+)='14'
    union
    SELECT v.puissance
    FROM voiture v, marque m
    WHERE v.type='1'
    AND v.marque=m.code(+)
    AND m.type(+)='15'

  5. #5
    Membre Expert 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
    Par défaut
    Le(+) est utilisé par oracle pour des jointures externes, il ne faut pas le mettre lorsqu'il n'y a pas de jointure !

    essayez simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     SELECT v.puissance
    FROM voiture v, marque m
    WHERE v.type='1'
    AND m.type IN ('14','15')
    AND v.marque=m.code(+)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     SELECT v.puissance
     FROM voiture v LEFT OUTER JOIN marque m 
     ON (v.marque=m.code)
     WHERE m.type IN ('14','15')
    Bon courage

    Bon courage

  6. #6
    Membre expérimenté Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Par défaut
    J'ai pas de base pour vérifier ce que j'avance, mais de mémoire, c'est comme ca qu'on fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT v.puissance
    FROM voiture v, marque m
    WHERE v.type='1'
    AND (m.type is null or m.type IN ('14','15'))
    AND v.marque=m.code(+)
    le IS NULL traite le cas où la jointure externe ne ramène pas de ligne de la table marque

  7. #7
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Yanika_bzh Voir le message
    Le(+) est utilisé par oracle pour des jointures externes, il ne faut pas le mettre lorsqu'il n'y a pas de jointure !
    C'est faux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT *
    FROM DUAL ok, (SELECT 'A' AS dummy FROM DUAL) KO
    WHERE ok.dummy = ko.dummy (+)
    AND ko.dummy = 'A'
    => NO ROWS returned
     
    SELECT *
    FROM DUAL ok, (SELECT 'A' AS dummy FROM DUAL) KO
    WHERE ok.dummy = ko.dummy (+)
    AND ko.dummy (+) = 'A'
     
    DUMMY	DUMMY_1
    X

Discussions similaires

  1. [CR XI] Selection enregistrement avec ou et jointure externe
    Par Makz23 dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 20/05/2014, 10h00
  2. Jointure externe avec "select in"
    Par rami_rezi dans le forum SQL
    Réponses: 11
    Dernier message: 14/06/2013, 12h49
  3. jointure externe entre deux select
    Par xavier81 dans le forum Développement
    Réponses: 7
    Dernier message: 10/02/2011, 13h31
  4. Requete Select jointure externe.
    Par rednight dans le forum Langage SQL
    Réponses: 6
    Dernier message: 28/08/2009, 17h36
  5. [Interbase] [Triggers] jointure externe
    Par AnestheziE dans le forum InterBase
    Réponses: 9
    Dernier message: 17/11/2003, 16h17

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