Как заставить Postgresql «декартово произведение» вести себя при удалении нескольких массивов в select? - PullRequest
0 голосов
/ 16 мая 2018

Postgresql ведет себя странно при удалении нескольких массивов в списке выбора:

select unnest('{1,2}'::int[]), unnest('{3,4}'::int[]);
 unnest | unnest
--------+--------
      1 |      3
      2 |      4

по сравнению с массивами различной длины:

select unnest('{1,2}'::int[]), unnest('{3,4,5}'::int[]);
 unnest | unnest
--------+--------
      1 |      3
      2 |      4
      1 |      5
      2 |      3
      1 |      4
      2 |      5

Есть ли способ заставить последнее поведениене перемещая вещи в пункт от?

SQL генерируется слоем отображения, и мне будет намного проще реализовать добавляемую мной новую функцию, если я смогу оставить все в выделении.

1 Ответ

0 голосов
/ 16 мая 2018

https://www.postgresql.org/docs/10/static/release-10.html

Функции, возвращающие множество, теперь оцениваются перед вычислением скалярных выражений в списке SELECT, так же, как если бы они были помещены в элемент LATERAL FROM-предложения.Это позволяет более разумную семантику для случаев, когда присутствуют несколько функций, возвращающих множество. Если они возвращают различное количество строк, более короткие результаты расширяются, чтобы соответствовать самому длинному результату, добавляя нули.Ранее результаты циклически повторялись до тех пор, пока все они не заканчивались одновременно, создавая количество строк, равное наименьшему общему кратному периодов функций .

(выделено мной)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...