Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tôi có hiểu lầm tham gia không?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 cách để lấy số phút từ giá trị ngày giờ trong cơ sở dữ liệu Oracle

  2. Oracle Database12c ORA 01918 và lỗi kết nối

  3. Làm cách nào để chèn ngày BC vào Oracle?

  4. Truy vấn gốc ở chế độ ngủ đông - cột char (3)

  5. có cách nào để ghi lại tất cả các câu lệnh sql bị lỗi trong oracle 10g không