postgresql中unnest使用說明與示例

函數(shù)說明

語(yǔ)法:unnest(anyarray)
返回值:setof anyelement(可以理解為一個(gè)(臨時(shí))表)
說明:unnest函數(shù)將輸入的數(shù)組轉(zhuǎn)換成一個(gè)表,這個(gè)表的每一列都代表相應(yīng)的一個(gè)數(shù)組中的元素。
如果unnest與其他字段一起出現(xiàn)在select中,就相當(dāng)于其他字段進(jìn)行了一次join。

使用場(chǎng)景

完成行轉(zhuǎn)列的場(chǎng)景

使用實(shí)例

示例一: 單個(gè)unnest

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

示例二: unnest與其他字段一起查詢(常用場(chǎng)景)

select '張三' as name, unnest(Array['語(yǔ)文','數(shù)學(xué)','英語(yǔ)']) as course;
 name | course
------+--------
 張三 | 語(yǔ)文
 張三 | 數(shù)學(xué)
 張三 | 英語(yǔ)
(3 rows)

示例三: 多個(gè)unnest與其他字段一起查詢

多個(gè)unnest一起使用時(shí)要注意:

  • 如果2個(gè)unnest返回的表行數(shù)相同,則是根據(jù)行號(hào)進(jìn)行join的,就是輸出結(jié)果行1對(duì)應(yīng)行1,行2對(duì)應(yīng)行2...
select '張三' as name, unnest(Array['語(yǔ)文','數(shù)學(xué)','英語(yǔ)']) as course, unnest(Array[90,85,80]) as score;
 name | course | score
------+--------+-------
 張三 | 語(yǔ)文   |    90
 張三 | 數(shù)學(xué)   |    85
 張三 | 英語(yǔ)   |    80
(3 rows)
  • 如果2個(gè)unnest返回的表行數(shù)不同,則返回的結(jié)果是笛卡爾join,返回的總行數(shù)=表1行數(shù) * 表2行數(shù)
select '張三' as name, unnest(Array['語(yǔ)文','數(shù)學(xué)','英語(yǔ)']) as course, unnest(Array['籃球','足球']) as interest;
 name | course | interest
------+--------+----------
 張三 | 語(yǔ)文   | 籃球
 張三 | 數(shù)學(xué)   | 足球
 張三 | 英語(yǔ)   | 籃球
 張三 | 語(yǔ)文   | 足球
 張三 | 數(shù)學(xué)   | 籃球
 張三 | 英語(yǔ)   | 足球
(6 rows)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容