Vlákno názorů k článku Korelované vnořené dotazy: proč nepoužívat a čím nahradit od qwert67 - Nejdřív jedna drobná výtka (k příkladu s Rankem):...

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

    qwert67 (neregistrovaný)
    Nejdřív jedna drobná výtka (k příkladu s Rankem): Píšete "Ekvivalentní SQL příkaz je...", ale výsledek dotazu ekvivalentní není.
    Pak nevím, jestli je správně použít v ORDER BY jméno sloupce ID, které není uvedeno v na řádku SELECT.
    Proč není použito "ORDER BY product, sale_price" ? Tím by se podle mě vyřešily obě mé výtky - nebo se mýlím?

    Děkuji
  • 11. 3. 2008 12:01

    Pavel Stěhule
    Nemohu si pomoct, ale když porovnám obě výsledné tabulky, tak mi přijdou stejné - které řádky nejsou stejné (tabulek je tam víc, možná se každý díváme někam jinam)? Použití nezobrazeného sloupce v ORDER BY je korektní (v této pozici může být i libovolný výraz). ORDER BY product, sale_price jsem nikde nepoužil z toho důvodu, že jsem nikde nechtěl řadit podle produktu a ceny, tj. rank není podle ceny, ale podle data. tj. prvý nákup, druhý nákup, atd. Pokud bych chtel rank podle ceny, tj. nejdražší, .. pak bych řadil podle ceny.
  • 11. 3. 2008 12:14

    qwert67 (neregistrovaný)
    Podle mě se liší poslední tři řádky:
    v ukázce s funkcí report2() jsou to
    2007-10-13 | pecivo | 3 | 1
    2007-10-10 | pecivo | 3 | 2
    2007-10-12 | pecivo | 4 | 3

    a v ukázce s Selectem jsou to
    2007-10-10 | pecivo | 3 | 1
    2007-10-12 | pecivo | 4 | 2
    2007-10-13 | pecivo | 3 | 3

    což má k "ekvivalentnosti" (jak nás to učí ve škole) dost daleko.

    Podle mě by z hlediska čitelnosti článku bylo lepší, kdyby oba výsledky byly skutečně ekvivalentní.

    A k tomu ID v ODRER BY: nevíte prosím, jestli to, co píšete, je vlastnost SQL podle normy nebo jen nějakých SQL variant?

    Jinak děkuji za článek i za reakci.
  • 11. 3. 2008 13:04

    Pavel Stěhule
    ju. Máte pravdu. V té uložené proceduře má být ORDER BY product, id nikoliv product, sale_date. Moje chyba.

    Jinak, ohledně ORDER BY .. nemám po normu. Teď na compu jsem našel prezentaci k ANSI SQL 99:

    * ORDER BY Extensions
    ORDER BY on columns not in the select list
    DECLARE CURSOR FOR
    SELECT empno, name
    FROM employee
    ORDER BY salary DESC

    * ORDER BY expressions
    DECLARE C2 CURSOR FOR
    SELECT empno, name
    FROM employee
    ORDER BY salary + bonus ASC