2017-05-25 104 views
-2

我有2个数据库表,节点和边缘。节点表的ID是主键,边缘表有2列,id1和id2,这些是nodes.id的外键。这应该代表(一个边缘包含两个节点)PostgreSQL连接查询

节点之间的连接。如果边缘表包含例如

id1 id2 
1  3 
1  5 
2  5 

我需要一个查询的是,当I型1,PG应该在单细胞3,5-返回。类似这样的:

connections 
3,5 

那个查询应该是什么样的?

+0

如果数据还有一行值为1,6,那么结果是什么? –

回答

1

合并多行需要aggregation function(如果需要多个最终结果,则需要GROUP BY子句)。

对于这种情况,string_agg是一个使用。

例如

Select string_agg(id2, ', ') as connections from table where id1=1 group by id1 
+0

从来不知道string_agg存在,看起来非常强大;这是新的吗? – JeffUK

+1

@JeffUK它已经存在很长时间了。检查旧版本的文档显示它已添加9.0(2010-09-20发布)。 array_agg比较老,可以用于类似的效果(将数组转换为字符串函数,或者对于OP的问题,只是一个字符串和一些修剪)。 – jaxad0127

+0

谢谢,我只是刚刚注意到这是一个postgresql问题(不知道我是如何在这里结束的!)我实际上正在考虑MS SQL Server,巧合的是它只是被添加到最新版本。 – JeffUK