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

  • nyunyu
    félisten

    Üdv!
    mysql UNION-nál kellene nekem olyan megoldás, hogy az eredmény ne egy tábla több sor legyen, hanem egy sorba az összes eredmény (mondjuk vesszővel elválasztva) mint php alatt az implode.
    van mondjuk 3 tábla amit union-al összefűzök. mindegyik táblából lekérem az ID-t.
    Akkor az eredmény lesz egy ID tábla 3 értékkel.
    Van erre valami megoldás, hogy egy sor legyen benne a 3 érték.
    Fel szeretném használni egy másik lekérésbe ahol az IN-t fogom használni, csak ugye annak meg sorozat kell.
    Azaz később lesz egy SELECT * FROM xy WHERE id IN ( ide jön az union-os összefűzés)
    Így most ugye 3 lekérdezést futtatok, ezt szeretném egyre redukálni.

    Köszi!

    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