Du har ret i din beskrivelse af #1... problemet med din forespørgsel er på trin #2.
Når du laver en left join
fra kongerige til (familie og arter), anmoder du om hvert kongerige, selvom der ikke er nogen matchende (familie og art)... dette vil dog ikke returnere nogen (familie og art) kombination, der ikke har en matchende rige.
En nærmere forespørgsel ville være:
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;
Bemærk, at left join
blev erstattet med en full join
...
men dette returnerer kun familier, der er forbundet med en art... det returnerer ikke nogen familier, der er forbundet med kongeriger, men ikke arter.
Efter at have læst dit spørgsmål igen, er dette faktisk det, du ønskede...
EDIT:Ved nærmere eftertanke kunne du omskrive din forespørgsel sådan:
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;
Jeg tror, at dette ville være at foretrække, fordi du fjerner RIGHT JOIN
, som normalt er ilde set for at være dårlig stil... og parentesen, som kan være vanskelig for folk at parse korrekt for at afgøre, hvad resultatet bliver.