Faire une jointure gauche composée d'un sous ensemble filtré sur un élément de la table principale
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:
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:
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:
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:
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.