sql nietypowe łączenie zapytań

0

Witam,
mam w bazie 2 tabele, z czego jedna zawiera kolumnę z wartościami rozdzielanymi separatorem (wart1;wart2;wart3;), natomiast druga zawiera dane (przykładowa kolumna1 zawiera wartość wart1, kolumna2=opis_wart1). Od dłuższego czasu próbuję wyprodukować zapytanie które zwróci mi wynik w postaci tabela1.(wart1,wart2), (tabela2.opis_wart1+tabela2.opis_wart2). Jeśli zamotałem to przepraszam:)
Stanąłem na zapytaniu:

select t1.*,t2.wart1,t2.wart2 from tabela1 t1 join tabela2 t2 on INSTR( t1.wart1,t2.wart1) > 0

Niestety to zapytanie produkuje mi kilka rekordów, np jeśli tabela1 zawiera dane rozdzielone separatorem w liczbie 3 wartości to dostaję 3 rekordy na wyjściu, a bardzo chciałbym dostać jeden
Ale widzę że błądzę, więc myślę sobie że zapytam

0

po instr wnioskuję, że chodzi o oracle teraz uściślijmy masz taką strukturę:
tabela1.col1

'wart1;wart2;wart3'

tabela2.col1 tabela2.col2
'wart1' 'opis wart 1'
'wart2' 'opis wart 2'
'wart3' 'opis wart 3'

teraz robiąc select z tab1 co chcesz uzyskać? tylko wartość dla 'wart1' z tab2?

0

generalnie chcę uzyskać coś takiego:
kolumna1 ('wart1;wart2;wart3'),kolumna2('opis_wart1,opis_wart2,opis_wart3')

0

tabela1 zawiera kolumne wartosc oddzieloną ';'
tabela2 zawiera kolumny wartosc i opis

 
SELECT DISTINCT
       LISTAGG(t2.wartosc, ';') WITHIN GRUOP (order by t1.wartosc) OVER (PARTITION BY t1.wartosc),
       LISTAGG(t2.opis, ';') WITHIN GRUOP (order by t1.wartosc) OVER (PARTITION BY t1.wartosc)
  FROM tabela2 t2
  JOIN tabela t1 on INSTR(t1.wartosc, t2.wartosc || ';')>0;
 

To jest dla Oracla.

1 użytkowników online, w tym zalogowanych: 0, gości: 1