SQL中t()及t(n,a)的作用是什么?附UNNEST关联查询示例解析
关于SQL语句中
t (n, a) 的作用说明 首先要明确:这里的t不是函数,是表别名,括号里的内容是字段别名,完整的语法作用拆分如下:
- 语句中的
UNNEST(numbers, animals)是Presto等SQL引擎支持的数组展开函数,这里传入两个数组参数,会按元素位置并行把两个数组展开为多行:两个数组长度不一致时,短数组遍历完后,对应位置会补NULL,和你贴的查询结果一致。 AS t (n, a)是给UNNEST返回的临时结果集设置别名和字段名:- 临时结果集的表别名叫
t,可以省略不写,写了方便多表关联时指定字段归属 - 括号里的
n、a是给结果集的两个列依次设置的别名:n对应numbers数组展开后的元素值,a对应animals数组展开后的元素值,你上层SELECT语句里引用的n、a字段就来源于这里的别名定义。
- 临时结果集的表别名叫
如果换种写法你会更容易理解,下面的语句和你给出的示例执行结果完全一致:
SELECT numbers, animals, t.col1 AS n, t.col2 AS a FROM ( VALUES (ARRAY[2, 5], ARRAY['dog', 'cat', 'bird']), (ARRAY[7, 8, 9], ARRAY['cow', 'pig']) ) AS x (numbers, animals) CROSS JOIN UNNEST(numbers, animals) AS t;
UNNEST多参数返回的结果默认字段名就是col1、col2、……coln,你示例里的写法只是提前给字段起了更易读的别名而已。
内容的提问来源于stack exchange,提问作者CeibaM
相关产品推荐
相关产品推荐

