Je hebt gelijk met je beschrijving van #1... het probleem met je vraag is bij stap #2.
Wanneer je een left join
doet van koninkrijk tot (familie &soort), je vraagt elk koninkrijk aan, zelfs als er geen overeenkomende (familie &soort) is... dit levert je echter geen (familie &soort) combinatie op die geen bijpassend koninkrijk.
Een nadere vraag zou zijn:
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;
Merk op dat de left join
is vervangen door een full join
...
dit retourneert echter alleen families die geassocieerd zijn met een soort... het geeft geen families terug die geassocieerd zijn met koninkrijken maar niet met soorten.
Na het herlezen van uw vraag, is dit eigenlijk wat u wilde...
EDIT:Bij nader inzien zou je je vraag als volgt kunnen herschrijven:
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;
Ik denk dat dit de voorkeur verdient, omdat je de RIGHT JOIN
. elimineert , die meestal worden afgekeurd omdat ze een slechte stijl hebben... en de haakjes, die voor mensen lastig kunnen zijn om correct te ontleden om te bepalen wat het resultaat zal zijn.