2017-05-25 129 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