[megoldva] postgresql kérdés: columnnév behelyettesítése selectbe

Sziasztok!

Lenne egy olyan fura kérdésem, hogy:

Egy postgresql adatbázisban az egyik táblában egy oszlop azt adja meg, hogy a másik tábla melyik oszlopának értékét kell kiolvasni (egyfajta hivatkozás oszlopnév alapján).

Próbálkoztam olyan selecttel ami:

select oszlop1,(select hivatkozásoszlopnév from hivatkozástábla where oszlopx=érték),oszlop3 from tábla

ezzel csak az a baj, hogy a hivatkozásoszlopnévnek a nevét beírja minden sorba, de nem a neve kell minden sorban, hanem az értéke.

gugliztam, túrtam a postgre doksiját, de nem találtam, milyen szintaktika kell ehhez (vagy csak változó deklarálással megy - de akkor is hogyan ?).

Köszi a válaszokat előre is...

Hozzászólások

megoldhato bar nem a legszebb formaban.
lehet ra irni egy fuggvenyt. csak az a gond ezzel, hogy az oszlopnev tipusa adott kell hogy legyen. (tehat pl csak text, int, int2,numeric...)
es a select-et neked kell osszeirni es a plpgsql-ben kell exec kent lefuttatni az osszeallitott selec-et.

ha kezelhető ill. konstans mennyiségű oszlopod meződ van a hivatkozott táblában, akkor egy megoldás lehet a CASE struktúra:


  SELECT ...,
         ...,
         CASE WHEN hivatkozas_tabla.hivatkozas_mezo = 'mezo_1'
              THEN hivatkozott_tabla.mezo_1
              WHEN hivatkozas_tabla.hivatkozas_mezo = 'mezo_2'
              THEN hivatkozott_tabla.mezo_2
              ...
              ...
              WHEN hivatkozas_tabla.hivatkozas_mezo = 'mezo_N'
              THEN hivatkozott_tabla.mezo_N
              ELSE [érték egyéb esetben]
         END AS "hivatkozott_ertek",
         ...,
         ...
    FROM hivatkozott_tabla
    INNER JOIN hivatkozas_tabla
      ON [...]
    ...

de szerintem nem stimmel az adatbázis struktúrád, ha ilyesmit kell gányolni...