postgresql中unnest使用说明与示例

函数说明

语法:unnest(anyarray)
返回值:setof anyelement(可以理解为一个(临时)表)
说明:unnest函数将输入的数组转换成一个表,这个表的每一列都代表相应的一个数组中的元素。
如果unnest与其他字段一起出现在select中,就相当于其他字段进行了一次join。

使用场景

完成行转列的场景

使用实例

示例一: 单个unnest

select unnest(Array[1,2,3]) as a;
 a
---
 1
 2
 3
(3 rows)

示例二: unnest与其他字段一起查询(常用场景)

select '张三' as name, unnest(Array['语文','数学','英语']) as course;
 name | course
------+--------
 张三 | 语文
 张三 | 数学
 张三 | 英语
(3 rows)

示例三: 多个unnest与其他字段一起查询

多个unnest一起使用时要注意:

  • 如果2个unnest返回的表行数相同,则是根据行号进行join的,就是输出结果行1对应行1,行2对应行2...
select '张三' as name, unnest(Array['语文','数学','英语']) as course, unnest(Array[90,85,80]) as score;
 name | course | score
------+--------+-------
 张三 | 语文   |    90
 张三 | 数学   |    85
 张三 | 英语   |    80
(3 rows)
  • 如果2个unnest返回的表行数不同,则返回的结果是笛卡尔join,返回的总行数=表1行数 * 表2行数
select '张三' as name, unnest(Array['语文','数学','英语']) as course, unnest(Array['篮球','足球']) as interest;
 name | course | interest
------+--------+----------
 张三 | 语文   | 篮球
 张三 | 数学   | 足球
 张三 | 英语   | 篮球
 张三 | 语文   | 足球
 张三 | 数学   | 篮球
 张三 | 英语   | 足球
(6 rows)

你可能感兴趣的:(postgresql中unnest使用说明与示例)