【发布时间】:2017-10-06 13:35:49
【问题描述】:
我目前在连接两个 PSQL 表时遇到问题。我知道一直有人问这类问题,但是我找不到适用于我情况的答案。对于模糊的问题标题,我深表歉意。
描述简化的情况:我们有两个表,children 和 parents。如您所见,孩子们通过逗号分隔的“数组”中的 ID 链接到他们的父母。我想创建一个简单的视图(非物化),从孩子的角度来看,父母与他们的孩子在一起。
桌孩子
| 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 |
什么是我想要的结果的最佳解决方案?
【问题讨论】:
标签: sql database postgresql view