[英]PostgreSQL: Join 2 tables based on an array (foreign key) column
我正在使用PostgreSQL,並且有一個要保留我的用戶的表,在另一個表中,我要保留一個包含id和組名的用戶組。 在用戶表中,有一列將每個用戶的組ID保存在數組中。 現在,我想從用戶獲取所有數據以及每個用戶的組名稱。 我該怎么辦? 這是一個示例:user table:
user_id name roles
1 bob [1, 2]
2 jack [3]
角色表:
role_id name
1 ceo
2 cto
3 financial
我希望有:
user_id name role_name
1 bob CEO, cto
2 jack financial
正如用戶LJ01在評論中所說,您應該加入2個表。 如果用戶和組表具有以下結構:
CREATE TABLE users (
id BIGINT,
name TEXT,
group_ids BIGINT[]
);
CREATE TABLE groups (
id BIGINT,
name TEXT
);
您可以使用以下查詢聯接表:
SELECT u.*,g.name FROM users u JOIN groups g ON g.id = ANY (u.group_ids);
因此,如果用戶表具有以下數據:
id name group_ids
1 Test1 {1,2,3}
2 Test2 {3,4}
共有4組:
id name
1 Group1
2 Group2
3 Group3
4 Group4
查詢結果將是
1 Test1 {1,2,3} Group1
1 Test1 {1,2,3} Group2
1 Test1 {1,2,3} Group3
2 Test2 {3,4} Group3
2 Test2 {3,4} Group4
更新用戶要求每個用戶一行,而組匯總在一行中。 這可以通過以下查詢來實現:
SELECT u.id, u.name,array_agg(g.name) group_names FROM users u JOIN groups g ON g.id = ANY (u.group_ids)
GROUP BY u.id, u.name;
如果我們對答案開頭顯示的示例數據執行此查詢,則將獲得以下結果:
u.id u.name group_names
1 Test1 {Group1,Group2,Group3}
2 Test2 {Group3,Group4}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.