Keresés

Új hozzászólás Aktív témák

  • Jester01

    veterán

    válasz lapa #276 üzenetére

    1. Az alias nem befolyásolja a where-t, ott attól még nyugodtan lehet használni az eredeti nevet is.
    2. ez valami rettentő nagy eredményt ad: Ugyanis az al-selectben ha nem írod ki explicit a táblanevet/aliast akkor az a belső táblá(k)ra vonatkozik. Tehát tulajdonképpen azonosságot írtál (eltekintve attól, hogy NULL != NULL). Helyesen a külső selectben kell megadni tábla aliast és arra hivatkozni. Így ni:

    select bla, bla2, bla3, bla4,
    (select count(*) from tabla where bla = kulso.bla) from tabla kulso where ...

    Jester

  • #65304576

    törölt tag

    válasz lapa #279 üzenetére

    Eltartott egy ideig, mire értelmeztem, de azt hiszem, értem. :) Tehát van egy többé-kevésbé bonyolult képleted (kivonás), amit egy csomó más helyen is használni szeretnél ugyanazon select-en belül, és ezért szeretnéd először kiszámolni, majd a többi oszlopnál is valamiféle változót használni.

    A probléma csak kényelmi és vizuális ("csúnyán néz ki"), performanciára nincs hatása, mert az első kivonás eredménye kvázi konstansként behelyettesítődik majd a többi képletbe is (a parser felismeri az azonos kifejezést).
    Az Oracle-nek egyébként nincs inline változója, bár al-select-ekkel (inline view, vagy with ... as) megoldható a dolog, azzal igen valószínű, hogy csak rosszabbul jársz. :)
    Szóval marad a ctrl+c / ctrl + v. :) (Vagy a pl/sql, de az is lassabb lesz.)

    Ha a kifejezést máshol is használni kellene (pl. where-ben), akkor már esetleg lehet gondolkozni azon, hogy előre kiszámolni és primary key alapján visszakötni a főtáblához, immár egyszerű oszlopként. Pl.:

    with sub_diff as ( select id, end_time - start_time mp_diff
    from table1 where (end_time - start_time) < 5 )
    select d.data1 / t.mp_diff, d.data2 / t.mp_diff, d.data3 / t.mp_diff
    from sub_diff t, table1 d
    where d.id = t.id

    [ Szerkesztve ]

Új hozzászólás Aktív témák