#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
を削除するので、これは好ましいと思います 、通常はスタイルが悪いために眉をひそめます...そして括弧は、結果がどうなるかを決定するために人々が正しく解析するのが難しい場合があります。