sql >> Databasteknik >  >> RDS >> Oracle

Varför returnerar CONNECT BY LEVEL i en tabell extra rader?

I den första frågan ansluter du bara med nivån. Så om nivå <=1 får du var och en av posterna 1 gång. Om nivå <=2 får du varje nivå 1 gång (för nivå 1) + N gånger (där N är antalet poster i tabellen). Det är som att du korsansluter dig, eftersom du bara plockar alla poster från bordet tills nivån nås, utan att ha andra förutsättningar för att begränsa resultatet. För nivå <=3 görs detta igen för vart och ett av dessa resultat.

Så för 3 poster:

  • Lvl 1:3 rekord (alla har nivå 1)
  • Lvl 2:3 poster med nivå 1 + 3*3 poster med nivå 2 =12
  • Lvl 3:3 + 3*3 + 3*3*3 =39 (verkligen 13 poster vardera).
  • Lv 4:börjar du se ett mönster? :)

Det är inte riktigt en korskoppling. En korskoppling skulle bara returnera de poster som har nivå 2 i det här frågeresultatet, medan med denna connect by får du posterna med nivå 1 såväl som posterna som har nivå 2, vilket resulterar i 3 + 3*3 istället för bara 3*3 rekord.



  1. datagrip Kan inte tillämpa ändringar Denna tabell är skrivskyddad. Cellredigeringsändringar kan inte tillämpas

  2. Hur man korrekt ställer in en PDO-anslutning

  3. En översikt över indexändringarna i PostgreSQL 11

  4. Entity Developer och ADO.Net-dataleverantörer stödjer nu Entity Framework Core 5