在Postgresql中拆分以逗号分隔的字段,并在所有结果表上执行UNION ALL

Joh*_*ton 20 sql csv postgresql

我有一个包含逗号分隔字符串字段的表:

ID | fruits
-----------
1  | cherry,apple,grape 
2  | apple,orange,peach 
Run Code Online (Sandbox Code Playgroud)

我想创建表的规范化版本,如下所示:

ID | fruits
-----------
1  | cherry 
1  | apple 
1  | grape
2  | apple 
2  | orange 
2  | peach 
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

这给你这个:

  foo   
--------
  the    
  quick  
  brown  
  fox    
  jumped 
  over   
  the    
  lazy   
  dog    
 (9 rows)
Run Code Online (Sandbox Code Playgroud)

但这仅适用于单个领域.我想要做的是将某种UNION应用于通过拆分每个字段生成的所有表.谢谢.

Mic*_*son 23

这应该为您提供您正在寻找的输出:

SELECT 
    yourTable.ID, 
    regexp_split_to_table(yourTable.fruits, E',') AS split_fruits
FROM yourTable
Run Code Online (Sandbox Code Playgroud)

编辑:修正了正则表达式.