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

标签 sql postgresql plpgsql

我在 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)

或者,如果您有逗号分隔的字符串而不是 ARRAY:

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()在手册中。

关于sql - 为包含列表的单元格返回多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8491427/

相关文章:

返回记录数的 Postgresql 函数

用于建立优先级的 SQL 数据库查询设计

sql - 多字符串匹配性能

python - 如何接收有关表格更改的自动通知?

sql - 查询显示各部门工资最低的员工

mysql - 哪个数据库引擎最适合处理数组值?

php - PL/pgSQL - 运行 PHP 脚本或其他程序

sql - 损坏的 PL/ruby : convert a warehouse journal table 的替代品

mysql - 这个用于排名的 MySQL 触发器有什么问题?

sql - 来自 SQL Server 上服务器的意外 EOF