【发布时间】:2021-08-22 19:44:48
【问题描述】:
我有这个示例表(作为分层 SQL 的树)。
我们如何根据孩子找到父母?
例如:查找“Sally”的父母 - 答案:Chris and Barbara Edsger and Barbara > Grandma
样本数据:
| FAMILY_MEMBER | MOTHER | FATHER | MARRIED_TO |
|---|---|---|---|
| Grandma | null | null | Grandpa |
| Grandpa | null | null | Grandma |
| Nana | null | null | Granddad |
| Granddad | null | null | Nana |
| Edsger | Grandma | Grandpa | Grace |
| Ada | Grandma | Grandpa | null |
| Grace | Nana | Granddad | Edsger |
| Alan | Nana | Granddad | null |
| Chris | Grace | Edsger | Elizabeth |
| Barbara | Grace | Edsger | null |
| Elizabeth | null | null | Chris |
| Tim | Elizabeth | Chris | null |
| Linus | Elizabeth | Chris | null |
| Sally | Elizabeth | Chris | null |
我编写了这个查询来查找父母的孩子(并且它有效),但我无法编写查询来根据孩子查找父母。
SELECT lpad(' ',level*3,' ') || family_member as who, level
FROM family
start with family_member = 'Grandma'
Connect By Prior family_member IN (MOTHER, FATHER)
【问题讨论】:
-
我无法理解规则:为什么芭芭拉是莎莉的父母,而伊丽莎白(被宣布为她的母亲)却不是?为什么 Edsger 也与 Barbara 配对,而树中只有一个 Barbara,是在上一步分配的?为什么格蕾丝也缺席了?您模型中的父母与我们在现实生活中所称的父母不同吗?
-
@astentx 莎莉的父母(伊丽莎白和克里斯),“埃兹格”有两个孩子:1-克里斯 2-芭芭拉,因为芭芭拉没有结婚也没有孩子,所以只重复了一次作为“Edsger”的孩子,而不是任何一行的父母
-
例如:查找“Sally”的父母 - 答案:Chris 和 Barbara Edsger 和 Barbara > 奶奶