Sql 为包含列表的单元格返回多行

Sql 为包含列表的单元格返回多行,sql,postgresql,plpgsql,Sql,Postgresql,Plpgsql,我在postgres db中有类似的内容: | foo | 1,2 | a,b | 我想把它扩展到: | foo | 1 | a | | foo | 2 | b | 我知道我可以用plpgsql做到这一点,但我想知道是否有一种方法可以用sql做到这一点 提前感谢假设每行中有多个列表,您是否希望列表项之间存在一对一的关系,或者项目之间存在某种关系,因此您总是希望a与1绑定,b与2绑定 从一个简单的sql语句中,不是真的。我认为您必须使用存储过程并在表中循环。如果它被输入到应用程序中,您可以在一

我在postgres db中有类似的内容:

| foo | 1,2 | a,b |
我想把它扩展到:

| foo | 1 | a |
| foo | 2 | b |
我知道我可以用plpgsql做到这一点,但我想知道是否有一种方法可以用sql做到这一点


提前感谢

假设每行中有多个列表,您是否希望列表项之间存在一对一的关系,或者项目之间存在某种关系,因此您总是希望a与1绑定,b与2绑定

从一个简单的sql语句中,不是真的。我认为您必须使用存储过程并在表中循环。如果它被输入到应用程序中,您可以在一条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)
同样的结果。
有关和的更多信息,请参阅手册