Masz rację w opisie punktu nr 1... problem z zapytaniem dotyczy kroku nr 2.
Kiedy wykonujesz left join
od królestwa do (rodziny i gatunku), żądasz każdego królestwa, nawet jeśli nie ma pasującego (rodziny i gatunku) ... jednak nie zwróci ci to żadnej kombinacji (rodziny i gatunku), która nie ma pasujące królestwo.
Bliższe zapytanie to:
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;
Zauważ, że left join
zostało zastąpione przez full join
...
jednak zwraca to tylko rodziny powiązane z gatunkiem... nie zwraca żadnych rodzin powiązanych z królestwami, ale nie z gatunkami.
Po ponownym przeczytaniu pytania, to właśnie chcesz...
EDYCJA:Po głębszym namyśle możesz przepisać swoje zapytanie w ten sposób:
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;
Myślę, że byłoby to lepsze, ponieważ eliminujesz RIGHT JOIN
, które są zwykle niemile widziane za kiepski styl... i nawiasy, które mogą być trudne do poprawnego przeanalizowania, aby określić, jaki będzie wynik.