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 :
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 = 1
Donc ça, ça fonctionne, ce que j'aimerais faire c'est appliquer le filtrage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
ALIAS_T2.FIELD1 = T1.T2FIELD1 AND ALIAS_T2.FIELD2 = T1.T2FIELD2
dans la sous-requête afin que cet ensemble soit beaucoup plus léger en mémoire.
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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
ORA-00904: "T1"."FIELD1" : identificateur non valide
00904. 00000 -  "%s: invalid identifier"
Donc mes questions
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.