2017-02-13 49 views
1

我想用json_array_elements擴展json數組。但它工作得如此嫺熟。請看下面。postgresql,select multiple json_array_elements works so werid

選擇json_array_elements('[1,2]')as a,json_array_elements('[2,3,4'')as b;

a | b 
---+--- 
1 | 2 
2 | 3 
1 | 4 
2 | 2 
1 | 3 
2 | 4 

(6行)

選擇json_array_elements( '[1,2]'),其爲,json_array_elements( '[2,3]')爲b;

a | b 
---+--- 
1 | 2 
2 | 3 

(2行)

這似乎當數組的長度相等,不順心的事。 誰能告訴我,爲什麼是這樣的。

+0

我的postgresql的版本是9.4.4。我安裝了9.6.2並運行測試sql,沒有任何改變。 –

+0

[單個選擇列表中的SQL多個UNNEST](http://stackoverflow.com/q/23003601/1995738) – klin

回答

0

PostgreSQL重複每個列表,直到兩者碰巧在最後同時出現。

換句話說,結果列表的長度是輸入列表長度的least common multiple

這種行爲確實怪異,並會在PostgreSQL的V10改爲:

select json_array_elements('[1, 2]') as a, json_array_elements('[2, 3, 4]') as b; 
a | b 
---+--- 
1 | 2 
2 | 3 
    | 4 
(3 rows) 

commit message

雖然移動SRF評價ProjectSet將允許保留舊 「至少當一個 目標列表中存在多個SRF時(即繼續返回行直到所有SRF同時在其輸入端 處),我們決定只返回n行,直到 所有的SRF都耗盡,爲已經耗盡的那些返回NULL。我們 認爲以前的行爲太混亂,意想不到,實際上 不是特別有用。

+0

哦,那是爲什麼。非常感謝。當PostgreSQL添加這個改變時,它會在PostgreSQL 10中嗎? –

+0

是的。我已經將這些細節添加到了答案中。 –