Прав си за описанието на #1... проблемът с твоята заявка е на стъпка #2.
Когато правите left join
от кралство до (семейство и вид), вие изисквате всяко кралство, дори ако няма съвпадение (семейство и вид)... това обаче няма да ви върне нито една комбинация (семейство и вид), която няма съответстващо кралство.
По-близка заявка би била:
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;
Забележете, че left join
беше заменено с full join
...
обаче, това връща само семейства, които са свързани с даден вид... не връща никакви семейства, които са свързани с кралства, но не и видове.
След като прочетох отново въпроса ви, всъщност искахте това...
РЕДАКТИРАНЕ:При по-нататъшен размисъл можете да пренапишете заявката си така:
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;
Мисля, че това би било за предпочитане, защото елиминирате RIGHT JOIN
, които обикновено се намръщват поради лош стил... и скобите, които могат да бъдат трудни за хората да анализират правилно, за да определят какъв ще бъде резултатът.