sql >> Database >  >> RDS >> Oracle

Begrijp ik joins verkeerd?

Je hebt gelijk met je beschrijving van #1... het probleem met je vraag is bij stap #2.

Wanneer je een left join doet van koninkrijk tot (familie &soort), je vraagt ​​elk koninkrijk aan, zelfs als er geen overeenkomende (familie &soort) is... dit levert je echter geen (familie &soort) combinatie op die geen bijpassend koninkrijk.

Een nadere vraag zou zijn:

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;

Merk op dat de left join is vervangen door een full join ...

dit retourneert echter alleen families die geassocieerd zijn met een soort... het geeft geen families terug die geassocieerd zijn met koninkrijken maar niet met soorten.

Na het herlezen van uw vraag, is dit eigenlijk wat u wilde...

EDIT:Bij nader inzien zou je je vraag als volgt kunnen herschrijven:

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;

Ik denk dat dit de voorkeur verdient, omdat je de RIGHT JOIN . elimineert , die meestal worden afgekeurd omdat ze een slechte stijl hebben... en de haakjes, die voor mensen lastig kunnen zijn om correct te ontleden om te bepalen wat het resultaat zal zijn.



  1. SQLiteConstraintException-fout die wordt weergegeven na het starten van elke activiteit

  2. Spring boot Docker en Mysql . configureren

  3. Een Entity Framework-databaseverbinding testen

  4. SQL Server-query selecteer 1 van elke subgroep