Názor k článku Korelované vnořené dotazy: proč nepoužívat a čím nahradit od Pavel Stěhule - ju. Použití CTE je o něco širší nežli...

  • Článek je starý, nové názory již nelze přidávat.
  • 11. 3. 2008 14:39

    Pavel Stěhule
    ju. Použití CTE je o něco širší nežli pouze na hierarchické dotazy, i když si myslím, že hlavně u nich se člověk může s CTE setkat. Syntaxe CONNECT BY Oracle je jednodušší, klasičtější. CTE je ale univerzálnější: http://www.ksi.mff.cuni.cz/~pokorny/dj/prezentace/2_73.ppt . Čím dál se SQL posouvá od čistě relačního modelu, tím je to s přirozeností, čitelností a jednoduchostí horší :(. Ukázkou je CTE. Navíc, kromě DB2 si jak Microsoft, tak Oracle berou ze standardu jen části, které se jim hodí, což k ničemu dobrému nepřispívá. Do ANSI SQL se navíc dostává něco z Oracle (analytické dotazy), něco z DB2 (CTE), a občas některé rozumné věci se do standardu nedostanou. Např. Váš příklad se v dá poměrně jednoduše napsat jak ve Firebirdu, tak PostgreSQL (v pg: SELECT col1 FROM generate_series(0,100) temp1(col1)).

    Generovat vzestupnou řadu rekurzí (což dělá Váš příklad CTE) je samo o sobě docela hukot. Podobné příklady se používají v učebnicích (patrně proto, aby se ukázalo, jak SQL může být komplikované), podobně jako korelované poddotazy. Praxe je trochu jiná - víc se uplatní procedury.