簡體   English   中英

PostgreSQL:基於一個數組(外鍵)列連接兩個表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM