Postgres SQL: получение унифицированных строк - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть одна таблица, в которую я выгружаю все записи из разных источников (x, y, z), как показано ниже

+----+------+--------+
| id | source |
+----+--------+
| 1  |  x     |
| 2  |  y     |
| 3  |  x     |
| 4  |  x     |
| 5  |  y     |
| 6  |  z     |
| 7  |  z     |
| 8  |  x     |
| 9  |  z     |
| 10 |  z     |
+----+--------+

Затем у меня есть одна таблица отображения, где я сопоставляю значения между источниками на основе моего варианта использования, напримерниже

+----+-----------+
| id | mapped_id |
+----+-----------+
| 1  | 2         |
| 1  | 9         |
| 3  | 7         |
| 4  | 10        |
| 5  | 1        |
+----+-----------+

Я хочу объединить результаты, где я могу видеть только уникальные результаты, такие как

+-----+------------+
| id  | mapped_ids |
+-----+------------+    
| 1   | 2,9,5      |
| 3   | 7          |
| 4   | 10         |
| 6   | null       |
| 8   | null       |
+-----+------------+

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

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Насколько я понимаю, вы хотите увидеть все идентификаторы dump_table, которые не отображаются в столбце mapping_id, а затем объединить mapped_ids для тех, которые остались:

select d1.id, 
       array_agg(m1.mapped_id order by m1.mapped_id) filter (where m1.mapped_id is not null) as mapped_ids
from dump_table d1
  left join mapping_table m1 using (id)
where not exists (select *
                  from mapping_table m2 
                  where m2.mapped_id = d1.id)
group by d1.id;

Онлайн пример: https://rextester.com/JQZ17650

0 голосов
/ 07 декабря 2018

Попробуйте что-то вроде этого:

SELECT id, name, ARRAY_AGG(mapped_id) AS mapped_ids
FROM table1 AS t1
LEFT JOIN table2 AS t2 USING (id)
GROUP BY id, name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...