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 :

[9i] Multiple Left Outer Join


Sujet :

Oracle

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2005
    Messages : 44
    Points : 47
    Points
    47
    Par défaut [9i] Multiple Left Outer Join
    Salut à tous,

    J'ai un petit soucis pour transposer une view écrite sous SQL Server, vers un Oracle 9i.

    Cette fameuse requête, se présente comme ceci sous SQL Server:
    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
     
    SELECT * FROM
    ([Requête]) t1
    	LEFT OUTER JOIN t2 ON t2.[UserID] = t1.[UserID]
    		AND t2.[FileID] = t1.[ID]
    			LEFT OUTER JOIN t3 ON t1.[ID] = t3.[FileID]
    				AND t3.[ClientGuid] = t2.[ClientGuid]
    					INNER JOIN t4 ON t4.[ID] = t1.[ID]
     
    WHERE (t2.[StatDate] =	(	SELECT MAX(StatDate)
    				FROM [BLUP_DLStats]
    				WHERE [UserID] = t1.[UserID]
    					AND [FileID] = t1.[ID]
    			)
    	) OR
    	(t2.[StatDate] IS NULL)
    GO
    J'ai essayé de transposer celà en Oracle comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT * FROM
    ([Requête]) T1, T2, T3, T4
    WHERE T1."UserID" = T2."UserID"(+)
    	AND T1."ID" = T2."FileID"(+)
    		AND T1."ID" = T3."FileID"(+)
    			AND T2."ClientGuid" = T3."ClientGuid"(+)
    				AND T1."ID" = T4."ID"
    J'obtiens alors une erreur ORA-01417

    Auriez-vous une solution pour faire passer ce "multiple left outer join" ?

    Merci d'avance.

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2005
    Messages : 44
    Points : 47
    Points
    47
    Par défaut
    J'ai peut-être une solution, mais si vous trouvez mieux, je suis preneur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT * FROM
    ([Requête]) T1, "BLUP_DLStats" T2, "BLUP_ClientFile" T3, "BLUP_File" T4
    			WHERE T1."UserID" = T2."UserID"(+)
    				  AND T1."ID" = T2."FileID"(+)
    				  	  AND (T3."FileID" IS NULL OR T1."ID" = T3."FileID")
    					  	  AND T2."ClientGuid" = T3."ClientGuid"(+)
    						  	  AND T1."ID" = T4."ID"

  3. #3
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    essaye comme ceci
    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
    Select
            ...
    From
            (
                Select
                        ...
                From
                        T1
                        , T2
                Where
                        T1."UserID" = T2."UserID"(+)
                And     T1."ID" = T2."FileID"(+)
            )   TT1
            , T3
            , T4
    Where
                    TT1."ID" = T3."FileID"(+)
    	AND     TT1."ClientGuid" = T3."ClientGuid"(+)
    	AND     TT1."ID" = T4."ID"
    le but est de faire une pré-requête dans la clause FROM (on appelle ça une vue en ligne ou inline-view) qui contient la première jointure externe.
    Ensuite ce résultat sera consédéré comme une seule table (TT1) que tu peux également joindre en externe avec T3...

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    la syntax left outer join est valide en 9i

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2005
    Messages : 44
    Points : 47
    Points
    47
    Par défaut
    J'y avais aussi pensé Yorglaa, mais je me demandais si ce n'étais pas moins performant, car c'est refaire un select à chaque fois.

  6. #6
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    non, non...
    Oracle commence par la vue en-ligne (1x) PUIS s'appuie dessus pour le reste !

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2005
    Messages : 44
    Points : 47
    Points
    47
    Par défaut
    Ok, merci beaucoup

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

Discussions similaires

  1. Probleme de NULL avec LEFT OUTER JOIN
    Par jiluc dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/01/2006, 15h42
  2. Bug LEFT OUTER JOIN Firebird
    Par Fabio2000 dans le forum SQL
    Réponses: 3
    Dernier message: 21/11/2005, 10h08
  3. Problème avec left outer join
    Par jgfa9 dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/08/2005, 22h07
  4. Problème de performance avec LEFT OUTER JOIN
    Par jgfa9 dans le forum Requêtes
    Réponses: 6
    Dernier message: 17/07/2005, 14h17
  5. concatenation de chaine dans un left outer join
    Par the_edge dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 11/11/2004, 17h08

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