Вы правы в своем описании # 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
, которые обычно осуждаются за плохой стиль ... и скобки, которые могут быть хитрыми для людей, чтобы правильно проанализировать, чтобы определить, каков будет результат .