簡體   English   中英

Postgres:對外鍵運行“數據透視查詢”嗎?

[英]Postgres: run “pivot query” on foreign key?

我正在運行Postgres 9.6。 我們有兩個表,第一個是user

id   | integer
name | varchar

第二個是feature_flag ,它具有user的外鍵:

id   | integer
user_id | integer

我想創建一個表用戶,該表顯示(除其他事項外)用戶已啟用的功能標志-可能帶有一個用於功能標志的數組列(向更好的建議開放,例如可以是每個帶有T / F的功能標志的列)。

因此結果可能如下所示:

id,name,flags
1,foo,"[1,3]"
2,bar,"[1,2]"

或像這樣:

id,name,flag_1,flag_2,flag_3
1,foo,T,F,T
2,bar,T,T,F

我該怎么做呢? 我知道如何為每個用戶的每個標志獲取一行:

   SELECT u.*, feature_flags 
   FROM "user" u
   OUTER JOIN feature_flag f on f.user_id=u.id

但是,如何將其擴展到以上內容呢?

您可以匯總標志:

SELECT u.*, array_agg(f.integer) as feature_flags
FROM "user" u
  LEFT JOIN feature_flag f on f.user_id=u.id
group by u.id;

以上要求"user".id是表"user"的主鍵

如果您有標志的上限,則可以使用以下內容創建列:

select id, name,
       1 = any(feature_flags) as flag_1, 
       2 = any(feature_flags) as flag_2, 
       3 = any(feature_flags) as flag_3, 
       .... 
from (
  SELECT u.*, array_agg(f.integer) as feature_flags
  FROM "user" u
    LEFT JOIN feature_flag f on f.user_id=u.id
  group by u.id
) t

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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