2011-12-13 48 views
1

細胞我有一個Postgres數據庫是這樣的:返回多行包含列表

| foo | 1,2 | a,b | 

我想將它擴展爲:

| foo | 1 | a | 
| foo | 2 | b | 

我知道我可以PLPGSQL做到這一點但想知道是否有辦法與SQL。

在此先感謝

回答

0

考慮這個演示:

SELECT name 
     ,unnest(a) 
     ,unnest(b) 
FROM (VALUES ('foo', '{1,2}'::int[], '{a,b}'::text[])) t(name, a, b) 

結果:

name | unnest | unnest 
------+--------+-------- 
foo |  1 | a 
foo |  2 | b 
(2 rows) 

或者,如果你有逗號分隔的字符串,而不是數組:

SELECT name 
     ,regexp_split_to_table(a, ',') 
     ,regexp_split_to_table(b, ',') 
FROM (VALUES ('foo', '1,2'::text, 'a,b'::text)) t(name, a, b) 

相同的結果。
更多關於unnest()regexp_split_to_table()的說明。

+0

這就是我之後的事,非常感謝! – Jim

0

你想要一個一個列表項之間的一個關係,假設有每一行中多個列表,或者是有,所以你總想綁在1項之間的一些關係, b綁定到2?

從單個直接的sql語句中,不是真的。我認爲你將不得不使用存儲過程並在表中循環。如果它提供給應用程序,則可以在一個sql語句中抓取所有內容,然後使用您的代碼循環遍歷它並從每行中分出列表。