sql >> Databasteknik >  >> RDS >> Oracle

Missförstår jag anslutningar?

Du har rätt i din beskrivning av #1... problemet med din fråga är i steg #2.

När du gör en left join från kungarike till (familj &art), begär du varje kungarike, även om det inte finns någon matchande (familj och art)... detta kommer dock inte att returnera någon (familj &art) kombination som inte har en matchande kungarike.

En närmare fråga skulle vara:

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ägg märke till att left join ersattes med en full join ...

men, detta returnerar bara familjer som är associerade med en art... det returnerar inte några familjer som är associerade med kungadömen men inte arter.

Efter att ha läst din fråga igen, är detta faktiskt vad du ville ha...

EDIT:Vid närmare eftertanke kan du skriva om din fråga så här:

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;

Jag tror att detta skulle vara att föredra, eftersom du tar bort RIGHT JOIN , som vanligtvis är ogillade för att vara dålig stil... och parentesen, vilket kan vara svårt för folk att analysera korrekt för att avgöra vad resultatet kommer att bli.



  1. När kan jag vara värd för IIS och SQL Server på samma maskin?

  2. Hur man tar bort ledande och efterföljande blanksteg i MySQL

  3. Optimera en enkel mysql-val på ett stort bord (75 miljoner+ rader)

  4. varför PG::UniqueViolation:FEL:dubblettnyckelvärde bryter mot unik begränsning?