Oracle
 sql >> база данни >  >> RDS >> Oracle

Грешно ли разбирам присъединяванията?

Прав си за описанието на #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 , които обикновено се намръщват поради лош стил... и скобите, които могат да бъдат трудни за хората да анализират правилно, за да определят какъв ще бъде резултатът.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL заявка за свиване на дублиращи се стойности по период от време

  2. REgex за получаване на числа от низ в Oracle

  3. Функция ASIN() в Oracle

  4. ORA-00904:ID:невалиден идентификатор

  5. Елиминирането на присъединяване не работи в Oracle с подзаявки