sql >> Database teknologi >  >> RDS >> Oracle

Misforstår jeg joinforbindelser?

Du har ret i din beskrivelse af #1... problemet med din forespørgsel er på trin #2.

Når du laver en left join fra kongerige til (familie og arter), anmoder du om hvert kongerige, selvom der ikke er nogen matchende (familie og art)... dette vil dog ikke returnere nogen (familie og art) kombination, der ikke har en matchende rige.

En nærmere forespørgsel ville være:

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;

Bemærk, at left join blev erstattet med en full join ...

men dette returnerer kun familier, der er forbundet med en art... det returnerer ikke nogen familier, der er forbundet med kongeriger, men ikke arter.

Efter at have læst dit spørgsmål igen, er dette faktisk det, du ønskede...

EDIT:Ved nærmere eftertanke kunne du omskrive din forespørgsel sådan:

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;

Jeg tror, ​​at dette ville være at foretrække, fordi du fjerner RIGHT JOIN , som normalt er ilde set for at være dårlig stil... og parentesen, som kan være vanskelig for folk at parse korrekt for at afgøre, hvad resultatet bliver.



  1. Valider url for flersproget - japansk langauga

  2. DNA vs moderne sikkerhedskopieringsmetoder:Fremtiden for datalagring

  3. MySQL Hjælp:Optimer opdateringsforespørgsel, der angiver rangering i henhold til rækkefølgen af ​​en anden kolonne

  4. Gør nogle ret basale summer med forskellige tabeller