Máte pravdu s popisem č. 1... problém s vaším dotazem je v kroku č. 2.
Když provedete left join
z království do (rodina &druh), požadujete každé království, i když neexistuje žádná odpovídající (rodina &druh)... toto vám však nevrátí žádnou kombinaci (rodina &druh), která nemá odpovídající království.
Bližší dotaz by byl:
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;
Všimněte si, že left join
bylo nahrazeno full join
...
toto však vrací pouze rodiny, které jsou spojeny s určitým druhem... nevrací žádné rodiny, které jsou spojeny s královstvími, ale ne s druhy.
Po opětovném přečtení vaší otázky je to vlastně to, co jste chtěli...
EDIT:Při dalším zamyšlení můžete svůj dotaz přepsat takto:
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;
Myslím, že by to bylo vhodnější, protože eliminujete RIGHT JOIN
, které jsou obvykle odsuzovány pro jejich špatný styl... a závorky, které mohou být pro lidi složité správně analyzovat, aby určili, jaký bude výsledek.