我确实有一个很大的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属于同一棵树的其他任何人(无论是PARENTID
,CHILDID
还是其他人)都属于同一个家庭IN_LAW_ID
关系)。
为了使事情复杂一点,树中的关系可以是循环的。
PARENTID
,而凯文的凯瑟琳可以为PARENTID
。 啊,树可以变得很大,最多有3000个成员。
我目前的方法是使用专用于网络挖掘的工具,提取和命名每个不同的子网(因此,完整的子网不与其他网络连接)。但是这些工具可以在我的笔记本电脑上运行,并且需要一整周的时间来生成FAMILYID
的最终列表。
我想象一个简单的(或相当复杂的)SQL查询将具有更高的性能-但是我不知道如何解决SQL中的问题。 (我打算在我们的Microsoft SQL服务器上运行它。)
任何帮助将不胜感激!