Ответ 1
Это даст вам результат, который вы ищете:
SELECT
yourTable.ID,
regexp_split_to_table(yourTable.fruits, E',') AS split_fruits
FROM yourTable
EDIT: Исправлено регулярное выражение.
У меня есть таблица, содержащая поле разделенных запятыми строк:
ID | fruits
-----------
1 | cherry,apple,grape
2 | apple,orange,peach
Я хочу создать нормализованную версию таблицы, например:
ID | fruits
-----------
1 | cherry
1 | apple
1 | grape
2 | apple
2 | orange
2 | peach
В документации postgresql 8.4 описывается функция regexp_split_to_table, которая может преобразовывать одну таблицу:
SELECT foo
FROM regexp_split_to_table('the quick brown fox jumped over the lazy dog',E'\\s+') AS
foo;
который дает вам следующее:
foo
--------
the
quick
brown
fox
jumped
over
the
lazy
dog
(9 rows)
Но это только для одного поля. То, что я хочу сделать, - это какой-то UNION, применяемый ко всем таблицам, генерируемым разбиением каждого поля. Спасибо.
Это даст вам результат, который вы ищете:
SELECT
yourTable.ID,
regexp_split_to_table(yourTable.fruits, E',') AS split_fruits
FROM yourTable
EDIT: Исправлено регулярное выражение.