sql >> Databáze >  >> RDS >> Oracle

Oracle, Connect By rownum

Vysvětlení v Krokodilkově odpovědi je prostě špatné. Můžete ignorovat značku "Správná odpověď" a četné kladné hlasy, stále je to špatně. Je zajímavé, že nechal jako cvičení přesně ten případ, který dokazuje, že vysvětlení je špatné.

A CONNECT BY dotaz nefunguje "jako by" nové tabulky (nebo nové výstupní sady řádků SELECT prohlášení) jsou generovány v každém kroku. Toto je chyba v argumentu.

Spíše existuje pouze jeden sada řádků vygenerována celkově (ve všech krocích). Je pravda, že nové řádky se přidávají na základě řádků vygenerovaných v předchozím kroku; ale samotná sada řádků je jedna a rozrůstá, nikoli samostatné sady řádků.

To je zvláště důležité s ohledem na ROWNUM . ROWNUM je přiřazeno k řádkům v jedné sadě řádků "výsledek", počínaje 1. V CONNECT BY dotazu, existuje pouze jedna sada řádků a ROWNUM přechází od 1 do n v rostoucí posloupnosti.

Pokud byla Krokodilkova odpověď správná, pak ROWNUM restartuje na 1 v každém kroku. To zjevně není tento případ:zkusme to na „standardním“ hierarchickém dotazu.

select     empno, ename, mgr, level, rownum
from       scott.emp
start with mgr is null
connect by prior empno = mgr
;

     EMPNO ENAME             MGR      LEVEL     ROWNUM
---------- ---------- ---------- ---------- ----------
      7839 KING                           1          1
      7566 JONES            7839          2          2
      7788 SCOTT            7566          3          3
      7876 ADAMS            7788          4          4
      7902 FORD             7566          3          5
      7369 SMITH            7902          4          6
      7698 BLAKE            7839          2          7
      7499 ALLEN            7698          3          8
      7521 WARD             7698          3          9
      7654 MARTIN           7698          3         10
      7844 TURNER           7698          3         11
      7900 JAMES            7698          3         12
      7782 CLARK            7839          2         13
      7934 MILLER           7782          3         14



  1. Jak opravit wamp server bez opětovné instalace?

  2. Proč find_in_set funguje, ale klauzule IN

  3. Spusťte, abyste zabránili vkládání duplicitních dat dvou sloupců

  4. Získejte SUM v GROUP BY s JOIN pomocí MySQL