細胞我有一個Postgres數據庫是這樣的:返回多行包含列表
| foo | 1,2 | a,b |
我想將它擴展爲:
| foo | 1 | a |
| foo | 2 | b |
我知道我可以PLPGSQL做到這一點但想知道是否有辦法與SQL。
在此先感謝
細胞我有一個Postgres數據庫是這樣的:返回多行包含列表
| foo | 1,2 | a,b |
我想將它擴展爲:
| foo | 1 | a |
| foo | 2 | b |
我知道我可以PLPGSQL做到這一點但想知道是否有辦法與SQL。
在此先感謝
考慮這個演示:
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()
的說明。
你想要一個一個列表項之間的一個關係,假設有每一行中多個列表,或者是有,所以你總想綁在1項之間的一些關係, b綁定到2?
從單個直接的sql語句中,不是真的。我認爲你將不得不使用存儲過程並在表中循環。如果它提供給應用程序,則可以在一個sql語句中抓取所有內容,然後使用您的代碼循環遍歷它並從每行中分出列表。
這就是我之後的事,非常感謝! – Jim