细胞我有一个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