0
我目前在加入兩個PSQL表時被卡住了。我知道這些問題總是被問到,但我卻無法找到適合我情況的答案。我爲模糊的問題標題道歉。加入兩個表並將多個關聯合併成一行
描述簡化情況:我們有兩個表格,children
和parents
。正如你所看到的,孩子們用逗號分隔的「陣列」與他們的父母連接起來。我想創建一個簡單的視圖(非物化),從孩子的角度來看,父母與孩子一起參加。
表兒童
| id | name | parents |
| -- | ----- | ------- |
| 1 | Bob | 1,2 |
| 2 | Alice | 3 |
表父母
| id | name | phone |
| -- | ----- | ----- |
| 1 | Carol | 1234 |
| 2 | Frank | 5678 |
| 3 | Grace | 9012 |
所需組合視圖
| child_id | child_name | parent1_name | parent1_phone | parent2_name | parent2_phone |
| -------- | ---------- | ------------ | ------------- | ------------ | ------------- |
| 1 | Bob | Carol | 1234 | Frank | 5678 |
| 2 | Alice | Grace | 9012 | | |
我試圖達到上述具有以下視圖定義:
SELECT children.id AS child_id,
children.name AS child_name,
parents.name AS parent_name,
parents.phone AS parent_phone
FROM children
JOIN parents ON parents.id::text =
ANY (string_to_array(children.parents, ','::text));
當然,這並不孩子的父母雙方合併成一排:
| child_id | child_name | parent_name | parent_phone |
| 1 | Bob | Carol | 1234 |
| 1 | Bob | Frank | 5678 |
| 2 | Alice | Grace | 9012 |
什麼是我想要的結果的最佳解決方案?
謝謝你的答案。不幸的是,我的數據庫由許多現代家庭組成;)我簡化了我的問題。實際上,我的'孩子'可以有多達5個父母(但也是零)。來自「父母」表的行最多包含5個要在視圖中合併的列。這會使你爲我提供的查詢非常麻煩。在處理更大的家庭和更多父數據列時,是否有辦法縮短或簡化查詢? –
是的,我想這可能是一個問題。但如果是'高達5'我仍然認爲可以工作。但你也有交叉表函數(你需要添加一個擴展)檢查這個[**教程**](http://www.vertabelo.com/blog/technical-articles/creating-pivot-tables-in-postgresql-使用最交叉函數)。 –