Du har rätt i din beskrivning av #1... problemet med din fråga är i steg #2.
När du gör en left join
från kungarike till (familj &art), begär du varje kungarike, även om det inte finns någon matchande (familj och art)... detta kommer dock inte att returnera någon (familj &art) kombination som inte har en matchande kungarike.
En närmare fråga skulle vara:
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;
Lägg märke till att left join
ersattes med en full join
...
men, detta returnerar bara familjer som är associerade med en art... det returnerar inte några familjer som är associerade med kungadömen men inte arter.
Efter att ha läst din fråga igen, är detta faktiskt vad du ville ha...
EDIT:Vid närmare eftertanke kan du skriva om din fråga så här:
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;
Jag tror att detta skulle vara att föredra, eftersom du tar bort RIGHT JOIN
, som vanligtvis är ogillade för att vara dålig stil... och parentesen, vilket kan vara svårt för folk att analysera korrekt för att avgöra vad resultatet kommer att bli.