J'ai pris le parti de recommencer à transformer le code
je part donc de (format oracle) :
select a.*,
b.met_id,b.met_lib,
h.fct_id,
c.fct_lib,
d.ct_id,d.ct_lib,j.ct_valide,
e.typ_id,e.typ_lib,
f.notfct_val,
i.ser_lib
from
collaborateurs a,
metiers b,
fonction c,
competences_tech d,
type_ct e,
li_col_ct_fct f,
li_col_met g,
li_col_fct h,
service i,
LI_MET_TYP_CT j
where
(a.col_id=g.col_id(+)
and g.met_id=b.met_id(+))
and (a.col_id=h.col_id(+)
and h.fct_id=c.fct_id(+))
and (f.col_id=a.col_id and f.met_id=b.met_id and d.ct_id=f.ct_id)
and (j.typ_id=e.typ_id)
and (a.ser_id = i.ser_id(+))
and (j.ct_id = d.ct_id)
and (j.met_id = g.met_id)
order by a.col_nom asc , c.fct_lib asc , e.typ_lib asc , j.ct_valide desc, d.ct_lib asc;
à
select collaborateurs.*,
metiers.met_id,metiers.met_lib,
li_col_fc.fct_id,
fonction.fct_lib,
competences_tech.ct_id,competences_tech.ct_lib,
LI_MET_TYP_CT.ct_valide,
type_ct.typ_id,type_ct.typ_lib,
li_col_ct_fct.notfct_val,
service.ser_lib
from
-- collaborateurs,
-- metiers ,
-- fonction ,
competences_tech ,
type_ct ,
li_col_ct_fct ,
-- li_col_met ,
-- li_col_fct ,
LI_MET_TYP_CT,
collaborateurs left outer join li_col_met on (collaborateurs.col_id=li_col_met.col_id)
left outer join li_col_fct on (collaborateurs.col_id=li_col_fct.col_id)
left outer join service on (collaborateurs.ser_id = service.ser_id),
li_col_fct left outer join fonction on (li_col_fct.fct_id=fonction.fct_id),
li_col_met left outer join metiers on (li_col_met.met_id=metiers.met_id)
where
-- li_col_met.met_id=metiers.met_id(+))
LI_MET_TYP_CT.typ_id=type_ct.typ_id
-- and (collaborateurs.col_id=li_col_fc.col_id(+)
-- and li_col_fc.fct_id=fonction.fct_id(+))
and (li_col_ct_fct.col_id=collaborateurs.col_id and li_col_ct_fct.met_id=metiers.met_id and competences_tech.ct_id=li_col_ct_fct.ct_id) and
(LI_MET_TYP_CT.typ_id=type_ct.typ_id)
-- and (collaborateurs.ser_id = service.ser_id(+))
and (LI_MET_TYP_CT.ct_id = competences_tech.ct_id)
and (LI_MET_TYP_CT.met_id = li_col_met.met_id)
order by collaborateurs.col_nom asc , fonction.fct_lib asc , type_ct.typ_lib asc , LI_MET_TYP_CT.ct_valide desc, competences_tech.ct_lib asc;
J'ai volontairement laissé en commentaires certaines lignes pour la clarté (il s'agit des lignes ayant été réécrites).
Le problème c'est que Pgsql (et tout autre SGBD sql92 et +) me crache :
"ERROR: table name "li_col_fct" specified more than once"
Ce qui est effectivement vrai car j'utilise la table li_col_fct comme table droite d'une première jointure, puis comme table gauche d'une autre jointure :
[collaborateurs] left outer join li_col_fct on (collaborateurs.col_id=li_col_fct.col_id)
et
li_col_fct left outer join fonction on (li_col_fct.fct_id=fonction.fct_id)
Comment puis je me sortir de ce mauvais pas ?
Merci d'avance !
# anchaîner les left outer join
Posté par Hardy Damien . Évalué à 4.
collaborateurs left outer join li_col_met on (collaborateurs.col_id=li_col_met.col_id)
left outer join li_col_fct on (collaborateurs.col_id=li_col_fct.col_id)
left outer join fonction on (li_col_fct.fct_id=fonction.fct_id),
...
Dam
[^] # Re: enchaîner les left outer join
Posté par Ontologia (site web personnel) . Évalué à 2.
Est-ce que
t1 left outer join t2 on (...)
left outer join t3 on (...)
est équivalent à
t1 left outer join t2 on (...),
t1 left outer join t3 on (...)
Ou alors équivalent à
t1 left outer join t2 on (...),
t2 left outer join t3 on (...)
?
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: enchaîner les left outer join
Posté par Nicolas P. . Évalué à 2.
[^] # Re: enchaîner les left outer join
Posté par Ontologia (site web personnel) . Évalué à 2.
MAis je fais comment, quand mes jointures sont redondantes, je suis obligé de faire deux tables ?
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: enchaîner les left outer join
Posté par Nicolas P. . Évalué à 1.
[^] # Re: enchaîner les left outer join
Posté par Nicolas P. . Évalué à 2.
Un truc du genre :
select ... from t4 left outer join (select ... from t1 left outer join t2 on (...) left outer join t3 on (...)) on (...))
# Un essai en sql propre...
Posté par alf . Évalué à 3.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.