我有一个保存一些个人信息的人表。如下表所示。
+----+------+----------+----------+--------+
| ID | name | motherID | fatherID | sex |
+----+------+----------+----------+--------+
| 1 | A | NULL | NULL | male |
| 2 | B | NULL | NULL | female |
| 3 | C | 1 | 2 | male |
| 4 | X | NULL | NULL | male |
| 5 | Y | NULL | NULL | female |
| 6 | Z | 5 | 4 | female |
| 7 | T | NULL | NULL | female |
+----+------+----------+----------+--------+
我也保持人与人之间的婚姻关系。喜欢:
+-----------+--------+
| HusbandID | WifeID |
+-----------+--------+
| 1 | 2 |
| 4 | 5 |
| 1 | 5 |
| 3 | 6 |
+-----------+--------+
有了这些信息,我们就可以想象出关系图了。如下所示;
问题是:我怎样才能通过提供任何人的 ID 来获得所有有联系的人。
例如;
- 当我给 ID=1 时,它应该返回给我 1,2,3,4,5,6。(顺序不重要)
- 同样,当我给 ID=6 时,它应该返回给我 1,2,3,4,5,6。(顺序不重要)
- 同样,当我给 ID=7 时,它应该返回给我 7。
请注意:人物节点的关系(边)可能在图的任何地方都有循环。上面的示例显示了我的一小部分数据。我是说; 人和婚姻表可能包含数千行,我们不知道哪里可能出现循环。
中提出的类似问题:
用于遍历整个无向图并返回找到的所有边的 PostgreSQL SQL 查询 http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=118319
但我无法编写工作 SQL。提前致谢。我正在使用 SQL Server。