Comment écrire une requête Oracle équivalente à la requête ci-dessous dans Informix:
select tab1.a,tab2.b,tab3.c,tab4.d
from table1 tab1,
table2 tab2 OUTER (table3 tab3,table4 tab4,table5 tab5)
where tab3.xya = tab4.xya
AND tab4.ss = tab1.ss
AND tab3.dd = tab5.dd
AND tab1.fg = tab2.fg
AND tab4.kk = tab5.kk
AND tab3.desc = "XYZ"
J'ai essayé comme:
select tab1.a,tab2.b,tab3.c,tab4.d
from table1 tab1,
table2 tab2 LEFT OUTER JOIN (table3 tab3,table4 tab4,table5 tab5)
where tab3.xya = tab4.xya
AND tab4.ss = tab1.ss
AND tab3.dd = tab5.dd
AND tab1.fg = tab2.fg
AND tab4.kk = tab5.kk
AND tab3.desc = "XYZ"
Quelqu'un peut-il m'aider à obtenir la syntaxe correcte?.
Écrivez une table par jointure, comme ceci:
select tab1.a,tab2.b,tab3.c,tab4.d
from
table1 tab1
inner join table2 tab2 on tab2.fg = tab1.fg
left join table3 tab3 on tab3.xxx = tab1.xxx
left join table4 tab4 on tab4.xya = tab3.xya and tab4.ss = tab3.ss
left join table5 tab5 on tab5.dd = tab3.dd and tab5.kk = tab4.kk
where
tab3.desc = "XYZ"
Notez que bien que ma requête contienne une jointure gauche réelle, votre requête ne le fait apparemment pas. Étant donné que les conditions se trouvent dans le où, votre requête doit se comporter comme des jointures internes. (Bien que j'avoue que je ne connais pas Informix, alors je me trompe peut-être).
Si tel est le cas, vous pouvez remplacer la jointure gauche par la jointure interne. Vous devez utiliser la jointure interne dans la mesure du possible, car ils sont plus rapides que la jointure gauche.
PS: la jointure gauche et la jointure externe gauche sont identiques.
Je suppose que tu veux quelque chose comme
SELECT tab1.a, tab2.b, tab3.c, tab4.d
FROM table1 tab1
JOIN table2 tab2 ON (tab1.fg = tab2.fg)
LEFT OUTER JOIN table4 tab4 ON (tab1.ss = tab4.ss)
LEFT OUTER JOIN table3 tab3 ON (tab4.xya = tab3.xya and tab3.desc = 'XYZ')
LEFT OUTER JOIN table5 tab5 on (tab4.kk = tab5.kk AND
tab3.dd = tab5.dd)