2016-01-10 17 views
1

我想在select子句中使用多个数组。最明显的一个没有工作和PostgreSQL点ROWS FROM() ...ROWS FROM()中具有多个非唯一调用的列定义

select * from unnest(array[1,2], array[3,4]) as (a int, b int); 

错误:

UNNEST() with multiple arguments cannot have a column definition list 
LINE 1: select * from unnest(array[1,2], array[3,4]) as (a int, b in... 
                 ^
HINT: Use separate UNNEST() calls inside ROWS FROM(), and attach a column definition list to each one. 

...

select * from rows from (unnest(array[1,2]), unnest(array[3,4])) as (a int, b int); 

错误:

ROWS FROM() with multiple functions cannot have a column definition list 
LINE 1: ...from (unnest(array[1,2]), unnest(array[3,4])) as (a int, b i... 
                  ^
HINT: Put a separate column definition list for each function inside ROWS FROM(). 

该手册也解释了这一点如何定义这些'单独的列定义'?

+1

什么是你所期望的结果?四行一列?或两列两列? –

+0

两列有两列'a'和'b'。 – hooblei

+0

如果你在9.4或更高版本,你可以使用:unnest(array [1,2],array [3,4]) –

回答

1

您可以直接用AS t(a, b)没有定义它们的类型的列名:

#= SELECT * FROM unnest(array[1,2], array[3,4,5]) AS t(a, b); 
a | b 
---+--- 
1 | 3 
2 | 4 
∅ | 5 

要定义类型,这样做对这种阵列本身:

#= SELECT a/2 AS half_a, b/2 AS half_b 
    FROM unnest(array[1,2]::float[], array[3,4,5]::integer[]) AS t(a, b); 
half_a | half_b 
--------+-------- 
    0.5 |  1 
     1 |  2 
     ∅ |  2 
+0

啊谢谢你。我尝试了各种变体,并且每次在列定义之前都错过了名称/前缀(在您的示例中为“t”)。 – hooblei

相关问题