2016-01-10 21 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

相關問題