postgresql,选择多个json_array_elements工作如此werid

时间:2017-02-13 03:18:42

标签: json postgresql select

我想用json_array_elements扩展json数组。但它的工作原理如此糟糕。请参阅下文。

  

选择json_array_elements('[1,2]')作为a,json_array_elements('[2,3,4]')为b;

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

(6行)

  

选择json_array_elements('[1,2]')作为a,json_array_elements('[2,3]')为b;

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

(2行)

似乎当数组的长度相等时,出现问题。 任何人都可以告诉我,为什么会这样。

1 个答案:

答案 0 :(得分:1)

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中时,“最不常见的多重”行为   targetlist(即继续返回行,直到所有SRF都在结尾处   他们同时输入),我们决定只返回行直到   所有SRF都已耗尽,已经用尽的SRF返回NULL。我们   认为以前的行为过于混乱,出乎意料并且实际上   不是特别有用。