Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Czy źle rozumiem sprzężenia?

Masz rację w opisie punktu nr 1... problem z zapytaniem dotyczy kroku nr 2.

Kiedy wykonujesz left join od królestwa do (rodziny i gatunku), żądasz każdego królestwa, nawet jeśli nie ma pasującego (rodziny i gatunku) ... jednak nie zwróci ci to żadnej kombinacji (rodziny i gatunku), która nie ma pasujące królestwo.

Bliższe zapytanie to:

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;

Zauważ, że left join zostało zastąpione przez full join ...

jednak zwraca to tylko rodziny powiązane z gatunkiem... nie zwraca żadnych rodzin powiązanych z królestwami, ale nie z gatunkami.

Po ponownym przeczytaniu pytania, to właśnie chcesz...

EDYCJA:Po głębszym namyśle możesz przepisać swoje zapytanie w ten sposób:

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;

Myślę, że byłoby to lepsze, ponieważ eliminujesz RIGHT JOIN , które są zwykle niemile widziane za kiepski styl... i nawiasy, które mogą być trudne do poprawnego przeanalizowania, aby określić, jaki będzie wynik.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak sformatować datę z Oracle na prawidłową datę i godzinę w c#

  2. Instalacja Oracle Grid — brakujące pakiety compat-libcap1-1.10 i inne

  3. Dlaczego nie mogę zaktualizować więcej niż jednej kolumny jednocześnie za pomocą słowa kluczowego?

  4. Jak mogę utworzyć tabelę jako wybraną z innej bazy danych w Oracle?

  5. Jak zaprojektować model danych, który zajmuje się obecnymi pracownikami i prognozowanymi pracownikami?