您对#1的描述是正确的…查询问题在步骤#2上。
当您进行
leftjoin从王国到(家庭和物种)的交易时,即使没有匹配的(家庭和物种),您也要请求每个王国…但是,这不会返回任何不符合您要求的(家庭和物种)组合没有匹配的王国。
一个更接近的查询将是:
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通常由于风格不佳而被皱眉的…和括号,这对于人们正确解析以确定结果将是棘手的。



