Sie haben Recht mit Ihrer Beschreibung von Nr. 1 ... das Problem mit Ihrer Abfrage liegt bei Schritt Nr. 2.
Wenn Sie einen left join
ausführen Von Königreich bis (Familie &Art) fordern Sie jedes Königreich an, auch wenn es keine passende (Familie &Art) gibt ... dies wird Ihnen jedoch keine (Familie &Art)-Kombination zurückgeben, die kein hat passendes Königreich.
Eine nähere Abfrage wä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;
Beachten Sie, dass der left join
wurde durch einen full join
ersetzt ...
dies gibt jedoch nur Familien zurück, die mit einer Spezies assoziiert sind ... es gibt keine Familien zurück, die mit Königreichen, aber nicht mit Spezies assoziiert sind.
Nachdem Sie Ihre Frage noch einmal gelesen haben, ist dies eigentlich das, was Sie wollten ...
BEARBEITEN:Bei weiterem Nachdenken könnten Sie Ihre Abfrage folgendermaßen umschreiben:
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;
Ich denke, das wäre vorzuziehen, weil Sie den RIGHT JOIN
eliminieren , die normalerweise als schlechter Stil verpönt sind ... und die Klammern, die für Leute schwierig zu analysieren sind, um das Ergebnis zu bestimmen.