首页 > 解决方案 > postgres sql:获取统一的行

问题描述

我有一张表,我在其中转储来自不同来源(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       |
+-----+------------+

我正在尝试不同的选择,但无法弄清楚,有没有办法我可以编写连接来做到这一点。我必须使用存储关联的映射表,并识别唯一记录以及未在任何地方映射的记录。

标签: postgresql

解决方案


尝试这样的事情:

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

推荐阅读