Идентификаторы сопоставления SQL со значениями в массивах - PullRequest
0 голосов
/ 27 февраля 2019

Я изо всех сил пытался написать этот запрос.Скажем, у меня есть таблица сопоставления и таблица с массивами идентификаторов.Я хочу запросить таблицу с массивами значений:

id|value     id_arr            value_arr
--+-----    ---------          ---------
 1|  4      {1, 2}       ->    {4, 5}
 2|  5      {1, 3}             {4, 7}
 3|  7      {1, 2, 3}          {4, 5, 7}

Кто-нибудь получил представление об этом?

Я использую PostgreSQL, но я думаю, что он не сильно изменится.

1 Ответ

0 голосов
/ 27 февраля 2019

Вы можете откатить значения и повторно сгруппировать:

select t2.*,
       (select array_agg(t1.val)
        from unnest(t2.arr) arr_val join
             t1
             on t1.id = arr_val
       ) as arr_ids
from t2 ;

Если вы хотите сохранить исходный порядок, вы можете использовать with ordinality:

select t2.*,
       (select array_agg(t1.val order by n)
        from unnest(t2.arr) with ordinality u(arr_val, n) join
             t1
             on t1.id = arr_val
       ) as arr_ids
from t2 ;

Здесь - это дб <> скрипка.

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