Bonjour à tous,
Je viens vers vous aujourd'hui car j'essaie de résoudre le problème suivant :
Comme faire une jointure gauche composée d'un sous ensemble filtré sur un élément de la table principale.
L'énoncé ne doit pas être très clair, alors voici une requête d'illustration :
La requête qui fonctionne :
Donc ça, ça fonctionne, ce que j'aimerais faire c'est appliquer le filtrage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT T1.ID, ALIAS_T2.FIELD1 FROM T1 LEFT JOIN (SELECT FIELD1 , FIELD2, FIELD3, row_number() over (partition by FIELD1,FIELD2 order by FIELD1) as RAWNUM FROM T2) ALIAS_T2 ON ALIAS_T2.FIELD1 = T1.T2FIELD1 AND ALIAS_T2.FIELD2 = T1.T2FIELD2 AND ALIAS_T2.RAWNUM = 1dans la sous-requête afin que cet ensemble soit beaucoup plus léger en mémoire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ALIAS_T2.FIELD1 = T1.T2FIELD1 AND ALIAS_T2.FIELD2 = T1.T2FIELD2
Ca donnerais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT T1.ID, ALIAS_T2.FIELD1 FROM T1 LEFT JOIN (SELECT FIELD1 , FIELD2, FIELD3, row_number() over (partition by FIELD1,FIELD2 order by FIELD1) as RAWNUM FROM T2 where ALIAS_T2.FIELD1 = T1.T2FIELD1 AND ALIAS_T2.FIELD2 = T1.T2FIELD2) ALIAS_T2 ON ALIAS_T2.RAWNUM = 1
Le seul truc c'est que dans la sous-requête il ne connait pas T1 et ses champs, j'ai donc droit à l'erreur :
Donc mes questions
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ORA-00904: "T1"."FIELD1" : identificateur non valide 00904. 00000 - "%s: invalid identifier"
Est-ce moi qui utilise une mauvaise syntaxe ?
Est-il impossible de faire référence à T1 dans la sous requête ?
Existe-il un contournement à ce type de problématiques ?
Oracle est-il intelligent ? Dans le sens : rajoute-il lui-même les conditions qui sont sont derrière le "ON" de la jointe dans le "where" de la sous-requête ? (et dans ce cas je me pose des questions existentielles pour rien)
Merci d'avance pour vos retour.
Partager