Рекурсивно присоединить поле к его проанализированным сегментам

У меня есть таблица, которая выглядит примерно так:

___COL_1___
'|A|B|C|'
'|D|A|'
'|X|Y|Z|A|'
'|Y|X|'
...

И я хочу создать новую таблицу, которая будет выглядеть так:

___COL_1___ ...........    ___COL_2___
'|A|B|C|'.....................'|A|'
'|A|B|C|'.....................'|B|'
'|A|B|C|'.....................'|C|'
'|D|A|'........................'|D|'
'|D|A|'........................'|A|'
'|X|Y|Z|A|B|C|'...........'|X|'
'|X|Y|Z|A|B|C|'...........'|Y|'
'|X|Y|Z|A|B|C|'...........'|Z|'
'|X|Y|Z|A|B|C|'...........'|A|'
'|X|Y|Z|A|B|C|'...........'|B|'
'|X|Y|Z|A|B|C|'...........'|C|'
...

Поэтому я хочу рекурсивно присоединяться к группе для каждого элемента в строке.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
29
1

Ответы 1

Вам не нужна рекурсия, просто:

  • обрезать первый и последний символы | столбца,
  • преобразовать результат в массив,
  • разложить массив,
  • добавьте символы |, если они вам нравятся.
with my_data(col1) as (
values
    ('|A|B|C|'),
    ('|D|A|'),
    ('|X|Y|Z|A|'),
    ('|Y|X|')
)
select 
    col1, 
    format('|%s|', unnest(string_to_array(trim(col1, '|'), '|'))) as col2
from my_data

   col1    | col2 
-----------+------
 |A|B|C|   | |A|
 |A|B|C|   | |B|
 |A|B|C|   | |C|
 |D|A|     | |D|
 |D|A|     | |A|
 |X|Y|Z|A| | |X|
 |X|Y|Z|A| | |Y|
 |X|Y|Z|A| | |Z|
 |X|Y|Z|A| | |A|
 |Y|X|     | |Y|
 |Y|X|     | |X|
(11 rows)

Другие вопросы по теме