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...
- 1162 megtekintés
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.
- A hozzászóláshoz be kell jelentkezni
Köszi, igazából megoldottam, nem a postgresqllel, megkerültem, és programból generálom a megfelelő SQL -t.
Egyébként ugyanaz a float típusú az összes...
Mégegyszer köszi...
- A hozzászóláshoz be kell jelentkezni
így utólag lehet, hogy az exec parancsot kerested:)
- A hozzászóláshoz be kell jelentkezni
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...
- A hozzászóláshoz be kell jelentkezni
"de szerintem nem stimmel az adatbázis struktúrád, ha ilyesmit kell gányolni..."
+1
Egyébként, ha már mindenképp ilyennel kell gányolni, akkor tárolt eljárás.
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
Egyébként csak ahhoz kellett volna, hogy a 20 (!) féle árból (termékenként) melyik vásárlóra melyik vonatkozik. Mindegy, megkerültem a problémát, megoldottam progiból.
Köszi a segítséget...
- A hozzászóláshoz be kell jelentkezni
Amire az adatbázis normalizálása a helyes megoldás.
- A hozzászóláshoz be kell jelentkezni
+1. Nem értem, miért kell felvenni 20 mezőt ahhoz, hogy a terméknek 20 féle ára legyen. Ha lesz egy 21., akkor alter table? Tervezési baromság.
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni