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