2012-02-10 16 views
17

Tengo una tabla que contiene un campo de cadenas separadas por comas:División de una separada por comas de campo en PostgreSQL y haciendo un UNION ALL en todas las tablas resultantes

ID | fruits 
----------- 
1 | cherry,apple,grape 
2 | apple,orange,peach 

Quiero crear una versión normalizada de la mesa, así:

ID | fruits 
----------- 
1 | cherry 
1 | apple 
1 | grape 
2 | apple 
2 | orange 
2 | peach 

la documentación de PostgreSQL 8.4 describe una función regexp_split_to_table que puede convertir a una sola tabla:

SELECT foo 
FROM regexp_split_to_table('the quick brown fox jumped over the lazy dog',E'\\s+') AS 
foo; 

que le da esto:

foo 
-------- 
    the  
    quick 
    brown 
    fox  
    jumped 
    over 
    the  
    lazy 
    dog  
(9 rows) 

Pero eso es sólo para un solo campo. Lo que quiero hacer es aplicar UNION tipo a todas las tablas generadas al dividir cada campo. Gracias.

Respuesta

18

Esto debe darle la salida que está buscando:

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

EDIT: Fija la expresión regular.

+0

gracias - regexp_split_to_table (fruits, E ',') AS fruit_split –

+0

me puede ayudar con http://stackoverflow.com/questions/40005974/convert-comma-seperated-db-items-to-isolated-rows – Learner

+0

probé SELECT CATEGORI.ID, regexp_split_to_table (CATEGORI.CATEGORY, E ',') COMO split_fruits FROM CATEGORI; – Learner

Cuestiones relacionadas