我所拥有的:
给定一棵树(或更像有向图),该树描述系统是如何由其泛型部分组成的。现在,让这个系统成为人体和节点,它的身体部分。

例如,3可以是有左叶和右叶的肝脏(6和9),两者都有静脉(8) (也可以在肝脏的任何未指明的部位找到,因此8->3),但也可以在舌头(5)中找到。肺(7) -在胸部(4) -也有一个右叶,等等。(当然,肝脏中没有肺,6->7也是合理的,所以这个例子不是最好的,但你明白了。)
所以我把这些数据放在这样的数据库里:
table: part
+----+------------+ id is primary key
| id | name |
+----+------------+
| 1 | head |
| 2 | mouth |
| 3 | liver |
| 4 | chest |
| 5 | tongue |
| 6 | left lobe |
| 7 | lung |
| 8 | veins |
| 9 | right lobe |
+----+------------+
table: partpart
+-------+---------+ part&cont is primary key
| part | cont | part is foreign key for part.id
+-------+---------+ cont is foreign key for part.id
| 2 | 1 |
| 3 | 1 |
| 5 | 2 |
| 6 | 3 |
| 7 | 3 |
| 7 | 4 |
| 8 | 3 |
| 8 | 5 |
| 8 | 6 |
| 8 | 9 |
| 9 | 3 |
| 9 | 7 |
+-------+---------+我想达到的目标是:
我想查询在part 3中可以找到的所有部分,并期望得到这样的结果:
result of query
+-------+---------+
| part | subpart |
+-------+---------+
| 3 | 6 |
| 3 | 7 |
| 3 | 8 |
| 3 | 9 |
| 6 | 8 |
| 7 | 9 |
| 9 | 8 |
+-------+---------+我觉得以这种期望的格式取得结果是不可行的,不过,如果能把它作为一个类似的集合,那就太好了,因为我的目的是为用户显示这样的数据:
3
├─ 6
│ └─ 8
├─ 7
│ └─ 9
│ └─ 8
├─ 8
└─ 9
└─ 8我是如何努力:
WITH RECURSIVE tree AS (
SELECT part.id as part, partpart.cont (..where to define subpart?)
FROM part JOIN partpart
ON part.id = partpart.part
WHERE part.id = 3
UNION ALL
SELECT part.id, partpart.cont
FROM (part JOIN partpart
ON part.id = partpart.part
), tree
WHERE partpart.cont = tree.part
)
SELECT part, subpart FROM tree这是我能做的最接近的事,但当然不起作用。
发布于 2017-12-13 20:47:49
问题解决了,这是我需要的查询,我希望它曾经帮助过其他人.
WITH RECURSIVE graph AS (
SELECT
p.id AS subpart,
pp.cont AS part
FROM part p JOIN partpart pp
ON p.id = pp.part
WHERE pp.cont = 3
UNION ALL
SELECT
part.id,
partpart.cont
FROM (part JOIN partpart
ON part.id = partpart.part
), graph WHERE partpart.cont = graph.subpart
)
SELECT part, subpart, FROM graphhttps://stackoverflow.com/questions/47780183
复制相似问题