Witam.
Używam PostgreSQL (od razu mówię, że zmiana bazy nie wchodzi w grę).
Mam 2 tabele:
Tabela OPISY
kolumna 1: o_id - typu integer
kolumna 2: tresc - typu text
Przykładowe dane wyglądają tak:
1, miły
2, bogaty
3, wysoki
4, mądry
5, szybki
6, wysportowany
Tabela OSOBY
kolumna 1: id - typu integer
kolumna 2: imie - typu varchar
kolumna 3: o_id - tyou integer[] (tabela elementów integer)
Dlatego trzecia kolumna typu tabelarycznego, bo zależało mi, aby dane były wprowadzane następująco:
1, Adam, {1,2,3,4}
2, Marcin, {2,4}
3, Bolek, {4,5,6}
zamiast tak:
1, Adam, 1
2, Adam, 2
3, Adam, 3
4, Adam, 4
5, Marcin, 2
6, Marcin, 4
7, Bolek, 4
8, Bolek, 5
9, Bolek, 6
Teraz chcę zrobić zapytanie wyciągające te dane do postaci:
1, Adam, miły bogaty wysoki mądry
I tu jest problem bo zapytanie typu:
SELECT osoby.id, osoby.imie, osoby.o_id AS cechy
FROM osoby
JOIN opisy USING (o_id);
Nie działa z racji różnicy typów (integer i integer[]).
Czy da się to wyciągnąć jednym poleceniem (może mieć podzapytania itd.)?
Czy muszę do tego już napisać funkcję albo procedurę w PostgreSQL?
A może to już da się zrobić tylko w aplikacji do której dostarczane będą dane?