SQL中是否可以识别和标记包含循环关系的树?

时间:2019-04-24 14:14:19

标签: sql tsql tree hierarchical-data circular-reference

我确实有一个很大的sql表(来自汽车行业),包含类似于以下格式的信息:

   NAME               ID   PARENTID    CHILDID  IN_LAW_ID
   ---------- ---------- ---------- ---------- ----------
   Bill                1          -          -         10
   Faye                2          -          -          -
   Joe                 3          2          1          -
   Billy               4          2          1          -
   Bob                 5          2          1          9
   Catherine           6          7          -          -
   Calvin              7          6          4          -
   Achmed              8          -          -          -
   Rachel              9          -          -          5

(好吧,名字实际上是备件,父母是前任的部分,孩子的后继是零件,而姻亲是可选的零件……)

我的目标是添加一个具有唯一ID的附加列,以显示NAME属于哪个家族。

  • 例如,Achmed没有父母,没有孩子,也没有姻亲,因此他会被标记为没有家庭,

  • 另一方面,
  • Bill与Joe以及同一个ID属于同一棵树的其他任何人(无论是PARENTIDCHILDID还是其他人)都属于同一个家庭IN_LAW_ID关系)。

为了使事情复杂一点,树中的关系可以是循环的。

  • 即凯瑟琳的卡尔文可以为PARENTID,而凯文的凯瑟琳可以为PARENTID

啊,树可以变得很大,最多有3000个成员。

我目前的方法是使用专用于网络挖掘的工具,提取和命名每个不同的子网(因此,完整的子网不与其他网络连接)。但是这些工具可以在我的笔记本电脑上运行,并且需要一整周的时间来生成FAMILYID的最终列表。

我想象一个简单的(或相当复杂的)SQL查询将具有更高的性能-但是我不知道如何解决SQL中的问题。 (我打算在我们的Microsoft SQL服务器上运行它。)

任何帮助将不胜感激!

0 个答案:

没有答案