Bạn đã nói đúng về mô tả số 1 của mình ... vấn đề với truy vấn của bạn là ở bước số 2.
Khi bạn thực hiện left join
từ vương quốc đến (họ &loài), bạn đang yêu cầu mọi vương quốc, ngay cả khi không có (họ &loài) phù hợp ... tuy nhiên, điều này sẽ không trả lại cho bạn bất kỳ tổ hợp (họ &loài) nào không có phù hợp với vương quốc.
Một truy vấn gần hơn sẽ là:
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;
Lưu ý rằng left join
đã được thay thế bằng full join
...
tuy nhiên, điều này chỉ trả về các gia đình có liên quan đến một loài ... nó không trả về bất kỳ họ nào được liên kết với các vương quốc mà không trả về các loài.
Sau khi đọc lại câu hỏi của bạn, đây thực sự là điều bạn muốn ...
CHỈNH SỬA:Suy nghĩ thêm, bạn có thể viết lại truy vấn của mình như sau:
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;
Tôi nghĩ điều này sẽ thích hợp hơn, vì bạn loại bỏ RIGHT JOIN
, thường bị phàn nàn vì văn phong kém ... và dấu ngoặc đơn, có thể khó phân tích cú pháp chính xác để mọi người phân tích cú pháp chính xác để xác định kết quả sẽ như thế nào.