Hirdetés

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

  • nyunyu

    félisten

    válasz pch #5522 üzenetére

    Szabvány szerint az IN-nek el kell fogadnia egy alquery eredményét is, amennyiben pontosan egy oszlop széles az eredménye, szóval nem értem miért akarod vesszővel felsoroltatni az UNION eredményét, ahelyett, hogy szimplán beírnád az IN utáni zárójelek közé az egész UNIONos queryt.

    Ez egy teljesen valid query:
    select *
    from tabla
    where id in (select id from tabla2 where ertek = 1
    union
    select id from tabla3 where ertek = 2
    union
    select id from tabla4 where ertek = 3);

    Végeredménye 0-3 sor lesz, attól függően hány ID van meg a tablaban.

    (Oracle megenged több oszlop széles IN-t is, itt arra kell figyelni, hogy ugyanannyi oszlop legyen az IN két oldalán felsorolva:
    where (a,b) in (select c,d from tabla); )

    Amit te szeretnél, az maximum dinamikus SQLlel oldható meg, amikor futási időben rakod össze stringként a queryt, aztán azt futtatod az erre szolgáló paranccsal (EXEC?), de annak meg jellemzően van valamennyi futási idő overheadje (Oraclenál ~1.5 másodperc?), szóval nem éri a nehezen összerakható, nehezen debugolható kóddal szívni, mert nem lesz gyorsabb.

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