Wolfnsex
@Wolfnsex
Если не хочешь быть первым - не вставай в очередь!

Как написать запрос для выбора связей без дубликатов PostgreSQL?

Доброго времени суток!

Помогите пожалуйста с запросом. Собственно, вот - структура БД и запрос.

Суть проблемы такова:
1. JOIN'ятся 2 таблицы (1 и 2), по нескольким полям (по другому никак)
2. Поля по которым происходит JOIN, своим сочетанием образуют уникальный ключ (условно/логически), т.е. логически верную строку результата (т.е. группировка нужна именно такая)
3. Нас интересует результат в последней колонке (array_agg)

Загвоздка состоит в 5 строке. Если мы убираем DISTINCT, то в результаты добавляется избыточное кол-во значений. Если мы оставляем DISTINCT - одинаковые значения "схлопываются", и результат получается не корректным.

Подскажите пожалуйста, как в колонке array_agg получить уникальные значения (в виде массива), без множественных дубляжей и без "схлопывания" одинаковых значений? Т.е. в результате должно быть что-то вроде: "b1, b1, b2, b2, b3, b3" или "b1, b2, b3, b1, b2, b3" (или в любом другом порядке).
  • Вопрос задан
  • 530 просмотров
Решения вопроса 1
erge
@erge
Примус починяю
SELECT 
  t2.b1,
  t2.b2,
  t2.b3,
  ARRAY_AGG(t2.value)
FROM table2 t2
WHERE EXISTS (
  SELECT 1
    FROM table1 t1
    WHERE t1.a1 = t2.b1
      AND t1.a2 = t2.b2
      AND t1.a3 = t2.b3
)
GROUP BY t2.b1, t2.b2, t2.b3


PS:
Подскажите пожалуйста, как в колонке array_agg получить уникальные значения (в виде массива)

вообще-то они не уникальные и я так понимаю вопрос должен был звучать как-то типа:
как из table2 выбрать значения по трем ключам связям с table1 и агрегировать колонку value в "массив"?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы