Агрегат на группу возвращает дубликаты - PullRequest
0 голосов
/ 18 января 2019

У меня следующий сценарий: пользователь принадлежит к нескольким группам. Группы организованы в иерархии:

enter image description here

Я хочу собрать всю личную информацию о группах, к которым принадлежит пользователь. Например. Лицо 1 принадлежит к группе 7. А группа 7 имеет связи со следующими группами 1,5,7,8 (полная ветвь)

Я написал следующий запрос:

SELECT person.id, array_agg(info)
FROM person LEFT JOIN person_group 
ON ARRAY[person.id] && path
LEFT JOIN person_information ON
ARRAY[person_information.id] && path
GROUP BY person.id;

Проблема с этим запросом заключается в том, что я получаю дубликат Информация:

enter image description here

Я не хочу использовать UNIQUE в поле array_agg (info). Скорее я хотел бы написать свое объединение, чтобы я получал только УНИКАЛЬНЫЕ строки таблицы информации о людях.

Как бы я это сделал? Спасибо

1 Ответ

0 голосов
/ 18 января 2019

Я решил это с помощью этого запроса:

SELECT person.id,  array_agg(info) FROM person 
LEFT JOIN person_information ON
person_information.id IN (
  SELECT DISTINCT(UNNEST(path)) 
  FROM person_group
  WHERE ARRAY[person.group_id] && path
) GROUP BY person.id;

У вас есть лучший подход?

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