Vous avez raison sur votre description de #1... le problème avec votre requête est à l'étape #2.
Lorsque vous effectuez une left join
du royaume à (famille et espèce), vous demandez chaque royaume, même s'il n'y a pas de correspondance (famille et espèce) ... cependant, cela ne vous renverra aucune combinaison (famille et espèce) qui n'a pas de royaume correspondant.
Une requête plus précise serait :
select *
from reino r
full join (
familia f
right join especie e
on f.fnombre = e.efamilia
and f.freino = e.ereino
) on r.rnombre = f.freino
and r.rnombre = e.ereino;
Notez que la left join
a été remplacé par une full join
...
cependant, cela ne renvoie que les familles associées à une espèce... il ne renvoie aucune famille associée à des royaumes mais pas à des espèces.
Après avoir relu votre question, c'est en fait ce que vous vouliez...
EDIT :Après réflexion, vous pouvez réécrire votre requête comme suit :
select *
from
especie e
left join familia f
on f.fnombre = e.efamilia
and f.freino = e.ereino
full join reino r
on r.rnombre = f.freino
and r.rnombre = e.ereino;
Je pense que ce serait préférable, car vous éliminez le RIGHT JOIN
, qui sont généralement mal vus pour leur style médiocre... et les parenthèses, qui peuvent être difficiles à analyser correctement pour déterminer quel sera le résultat.