Jointure avec 3 tables INNER et LEFT JOIN
Bonjour,
J'ai plusieurs tables que j'essaie de réunir sans succès… je vous préviens je débute et je n'ai pas de formation alors ça risque de décoiffer :)
S : une table d'individu, il peuvent y être plusieurs fois. L'objectif est de n'avoir qu'une ligne par individu en prenant sa dernière entrée
H_ES : la table des entrée (qui recueille toutes les entrées des individus
AR_Z1LOCAL à 5 qui sont des tables où je veux récupérer un libellé d'un code d'un champ de la table S
J'arrive à faire les jointures S et H_ES ou S et AR_Z1LOCAL à 5 mais au moment de combiner les 3 S, H_ES et AR_Z1LOCAL, je comprends pas. Voici ma requête et les erreurs que j'ai :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| select
S.ENT_ID,
S.ETA_ID,
S.ZL1_ID,
S.ZL2_ID,
S.ZL3_ID,
S.ZL4_ID,
S.ZL5_ID,
AR_Z1LOCAL.ZL1_LIB,
AR_Z2LOCAL.ZL2_LIB,
AR_Z3LOCAL.ZL3_LIB,
AR_Z4LOCAL.ZL4_LIB,
AR_Z5LOCAL.ZL5_LIB,
H_ES.E_S_DATE
from
S,
H_ES
left join AR_Z1LOCAL on AR_Z1LOCAL.ENT_ID = S.ENT_ID and AR_Z1LOCAL.ZL1_ID = S.ZL1_ID
left join AR_Z2LOCAL on AR_Z2LOCAL.ENT_ID = S.ENT_ID and AR_Z2LOCAL.ZL2_ID = S.ZL2_ID
left join AR_Z3LOCAL on AR_Z3LOCAL.ENT_ID = S.ENT_ID and AR_Z3LOCAL.ZL3_ID = S.ZL3_ID
left join AR_Z4LOCAL on AR_Z4LOCAL.ENT_ID = S.ENT_ID and AR_Z4LOCAL.ZL4_ID = S.ZL4_ID
left join AR_Z5LOCAL on AR_Z5LOCAL.ENT_ID = S.ENT_ID and AR_Z5LOCAL.ZL5_ID = S.ZL5_ID
inner join (
select
H_ES.SAL_MATR as Matricgrppp,
max(H_ES.E_S_DATE) as maxENTREEETABgrppp
from H_ES
group by H_ES.SAL_MATR) as GRPPP
on GRPPP.Matricgrppp = H_ES.SAL_MATR and GRPPP.maxENTREEETABgrppp = H_ES.E_S_DATE
where
S.ENT_ID = H_ES.ENT_ID and
S.SAL_MATR = H_ES.SAL_MATR |
Et voici mes messages d'erreur :
Msg 4104, Niveau 16, État 1, Ligne 21
L'identificateur en plusieurs parties "S.ENT_ID" ne peut pas être lié.
Msg 4104, Niveau 16, État 1, Ligne 21
L'identificateur en plusieurs parties "S.ZL1_ID" ne peut pas être lié.
Msg 4104, Niveau 16, État 1, Ligne 22
L'identificateur en plusieurs parties "S.ENT_ID" ne peut pas être lié.
Msg 4104, Niveau 16, État 1, Ligne 22
L'identificateur en plusieurs parties "S.ZL2_ID" ne peut pas être lié.
Msg 4104, Niveau 16, État 1, Ligne 23
L'identificateur en plusieurs parties "S.ENT_ID" ne peut pas être lié.
Msg 4104, Niveau 16, État 1, Ligne 23
L'identificateur en plusieurs parties "S.ZL3_ID" ne peut pas être lié.
Msg 4104, Niveau 16, État 1, Ligne 24
L'identificateur en plusieurs parties "S.ENT_ID" ne peut pas être lié.
Msg 4104, Niveau 16, État 1, Ligne 24
L'identificateur en plusieurs parties "S.ZL4_ID" ne peut pas être lié.
Msg 4104, Niveau 16, État 1, Ligne 25
L'identificateur en plusieurs parties "S.ENT_ID" ne peut pas être lié.
Msg 4104, Niveau 16, État 1, Ligne 25
L'identificateur en plusieurs parties "S.ZL5_ID" ne peut pas être lié.
Help :)
David.
Problème résolu, merci pour vos messages
Bonjour merci pour vos messages.
J'avoue je comprends pas tout.
J'ai trouvé une solution, l'INNER JOIN je l'ai mis dans le where et j'ai inversé l'ordre des tables après le from pour que la table S soit en dernier et ça marche....
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| select
S.ENT_ID,
S.ETA_ID,
S.ZL1_ID,
S.ZL2_ID,
S.ZL3_ID,
S.ZL4_ID,
S.ZL5_ID,
AR_Z1LOCAL.ZL1_LIB,
AR_Z2LOCAL.ZL2_LIB,
AR_Z3LOCAL.ZL3_LIB,
AR_Z4LOCAL.ZL4_LIB,
AR_Z5LOCAL.ZL5_LIB,
H_ES.E_S_DATE
from
H_ES,
S
left join AR_Z1LOCAL on AR_Z1LOCAL.ENT_ID = S.ENT_ID and AR_Z1LOCAL.ZL1_ID = S.ZL1_ID
left join AR_Z2LOCAL on AR_Z2LOCAL.ENT_ID = S.ENT_ID and AR_Z2LOCAL.ZL2_ID = S.ZL2_ID
left join AR_Z3LOCAL on AR_Z3LOCAL.ENT_ID = S.ENT_ID and AR_Z3LOCAL.ZL3_ID = S.ZL3_ID
left join AR_Z4LOCAL on AR_Z4LOCAL.ENT_ID = S.ENT_ID and AR_Z4LOCAL.ZL4_ID = S.ZL4_ID
left join AR_Z5LOCAL on AR_Z5LOCAL.ENT_ID = S.ENT_ID and AR_Z5LOCAL.ZL5_ID = S.ZL5_ID
where
S.ENT_ID = H_ES.ENT_ID
and S.SAL_MATR = H_ES.SAL_MATR
and (select max(H.E_S_DATE) from H_ES as H where H_ES.SAL_MATR=H.SAL_MATR)=H_ES.E_S_DATE |