我想知道使用父 ID 爬取公司结构的有效方法是什么。本质上,我想做的是找到存在的第一个 ContactID,因为这些联系人会继承到子位置。
例如:
Test Account
-North
--Michigan - Bob
---Detroit
----Algoma
-South
-East
-West
所以鲍勃将被继承到底特律和阿尔戈马。每个级别都有一个 ID 和一个 Parent ID,当然它与 Parent 的 ID 相匹配。如果给定了 ChildID(Algoma),我将如何爬上并检查 Algoma 上方的每个级别以获取联系人,直到到达密歇根?每个级别只有 1 个联系人。没有固定的结构,因此联系人可能位于子位置,也可能在到达联系人之前向上 20 层,但从结构上看,它始终是树上的第一个位置。任何想法都会被采纳。
表:
ID ParentID LevelName ContactID
1 NULL TestCo. NULL
2 3 Algoma NULL
3 4 Detroit NULL
4 5 Michigan 2
5 1 North 3
6 1 South 1
7 1 East 3
8 1 West NULL
传入@ID = 2,它将返回ContactID = 2。这不是每个公司的静态结构,可以有很多层次更深或更短。
最佳答案
递归查询来救援!
还有一个家长优先的版本:
WITH Parent (id, contactId) as (SELECT id, contactId
FROM Company
WHERE parentId IS NULL
UNION ALL
SELECT Company.id,
COALESCE(Company.contactId,
Parent.contactId)
FROM Company
JOIN Parent
ON Parent.id = Company.parentId)
SELECT *
FROM Parent
WHERE id = 2;
(有一个可用的 SQLFiddle example 。)
关于sql - 给定 childID 后如何爬取公司结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11941687/