2012-02-10 27 views
17

Tôi có một bảng có chứa một lĩnh vực dấu phẩy tách chuỗi:Splitting một bằng dấu phẩy trường trong PostgreSQL và làm một UNION ALL trên tất cả các bảng kết quả

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

Tôi muốn tạo ra một phiên bản bình thường của bảng, như thế này:

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

Các tài liệu postgresql 8.4 mô tả một hàm regexp_split_to_table có thể biến một bảng duy nhất:

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

mang đến cho bạn điều này:

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

Nhưng đó chỉ là một lĩnh vực duy nhất. Những gì tôi muốn làm là một số loại UNION áp dụng cho tất cả các bảng được tạo ra bằng cách chia tách từng trường. Cảm ơn bạn.

Trả lời

18

này sẽ cho bạn kết quả bạn đang tìm kiếm:

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

EDIT: Cố định regex.

+0

cảm ơn - regexp_split_to_table (trái cây, E ',') AS fruit_split –

+0

bạn có thể vui lòng giúp tôi với http://stackoverflow.com/questions/40005974/convert-comma-seperated-db-items-to-isolated-rows – Learner

+0

tôi đã thử SELECT CATEGORI.ID, regexp_split_to_table (CATEGORI.CATEGORY, E ',') AS split_fruits FROM CATEGORI; – Learner

Các vấn đề liên quan