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

Hvorfor returnerer CONNECT BY LEVEL på en tabel ekstra rækker?

I den første forespørgsel forbinder du kun med niveauet. Så hvis niveau <=1, får du hver af posterne 1 gang. Hvis niveau <=2, så får du hvert niveau 1 gang (for niveau 1) + N gange (hvor N er antallet af poster i tabellen). Det er, som om du krydser foreningen, fordi du bare vælger alle poster fra bordet, indtil niveauet er nået, uden at have andre betingelser for at begrænse resultatet. For niveau <=3, gøres dette igen for hvert af disse resultater.

Så for 3 poster:

  • Lvl 1:3 record (alle har niveau 1)
  • Lvl 2:3 poster med niveau 1 + 3*3 poster med niveau 2 =12
  • Lvl 3:3 + 3*3 + 3*3*3 =39 (faktisk 13 poster hver).
  • Lvl 4:begynder at se et mønster? :)

Det er ikke rigtig en krydsforbindelse. En cross join ville kun returnere de poster, der har niveau 2 i dette forespørgselsresultat, mens du med denne connect by får posterne med niveau 1 såvel som posterne med niveau 2, hvilket resulterer i 3 + 3*3 i stedet for blot 3*3 rekord.



  1. Sådan installeres MariaDB 10 på Debian og Ubuntu

  2. ORA-00932:inkonsistente datatyper:forventet - fik CLOB

  3. PostgreSQL dato() med tidszone

  4. ROLLBACK hændelsestriggere i postgresql