/ / postgresql, изберете няколко json_array_elements работи така werid - json, postgresql, изберете

postgresql, изберете няколко json_array_elements работи така werid - json, postgresql, изберете

Искам да използвам json_array_elements за разширяване на json масив. Но тя работи толкова добре. Pls виж по-долу.

изберете 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 реда)

Изглежда, когато дължината на масивите е равна, нещо се обърка. Може ли някой да ми каже защо е така.

Отговори:

0 за отговор № 1

PostgreSQL повтаря всеки списък, докато и двамата съвпадат едновременно.

С други думи, дължината на списъка с резултати е най-малко общо кратно от дължината на входните списъци.

Това поведение наистина е странно и ще се промени в 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)

От послание:

Докато се преместваше оценката на SRF към ProjectSet, щепозволявайте да запазите старата "най-малко често срещано множество", когато има множество SRF в едно целевия списък (т.е. продължете да връщате редове, докато всички SRF не са в края на техния принос в същото време), решихме вместо това да връщаме само редове до всички SRF са изчерпани, връщайки NULL за вече изчерпани такива. ние смята, че предишното поведение е твърде объркващо, неочаквано и всъщност не особено полезни.