Разделение поля через запятую в Postgresql и выполнение UNION ALL для всех полученных таблиц - PullRequest
19 голосов
/ 10 февраля 2012

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

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, примененный ко всем таблицам, сгенерированным путем разделения каждого поля.Спасибо.

1 Ответ

22 голосов
/ 10 февраля 2012

Это должно дать вам результат, который вы ищете:

SELECT 
    yourTable.ID, 
    regexp_split_to_table(yourTable.fruits, E',') AS split_fruits
FROM yourTable

EDIT: исправлено регулярное выражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...