如何跟踪表格行之间的ID/ParentID关系?
我有一个包含此数据records(ID, ParentID)
表:如何跟踪表格行之间的ID/ParentID关系?
ID ParentID
1 null
2 1
3 2
4 2
5 3
6 null
7 6
如果绘制在层次结构此表作为一个家庭,1,2,3,4,5
将彼此相关。
我想找到一种方法来传递一个ID(如3
),使它给我其他家庭成员。我使用C#和SQL,要么会做 - 我想找到这样一个结果:
3 - result 1,2,4,5
2 - result 1,3,4,5
6 - result 7
and so on
我想找到我传递,祖父母,孩子们的ID的父母和孙子(如我的例子)。
这种解决方案只给我我的孩子,我还需要我的父母和他们的孩子 – RMohammed 2010-04-27 13:16:00
看到查询的最后一行: '在c.ParentId = ch.CustomerID' 这是用来寻找孩子。 'on c.CustomerID = ch.ParentId' 会寻找父母。 使用联合来组合两个结果集。 – AlexanderMP 2010-04-27 13:20:22
谢谢你这么多“亚历山大” – RMohammed 2010-04-27 14:33:05
这应该这样做。
CREATE TABLE #Test
(
ID int,
ParentID int
)
INSERT #Test VALUES (1, null)
INSERT #Test VALUES (2, 1)
INSERT #Test VALUES (3, 2)
INSERT #Test VALUES (4, 2)
INSERT #Test VALUES (5, 3)
INSERT #Test VALUES (6, null)
INSERT #Test VALUES (7, 6)
DECLARE @QueryId int
SET @QueryId = 2
-- My parents
SELECT [ParentID] FROM #Test WHERE [ID] = @QueryID AND [ParentID] IS NOT NULL
UNION -- My parent's parents
SELECT [ParentID] FROM #Test WHERE [ID] IN (SELECT [ParentID] FROM #Test WHERE [ID] = @QueryID) AND [ParentID] IS NOT NULL
UNION -- My parent's children (i.e. my siblings), excluding me
SELECT [ID] FROM #Test WHERE [ParentID] IN (SELECT [ParentID] FROM #Test WHERE [ID] = @QueryID) AND [ID] != @QueryID
UNION -- My chidren
SELECT [ID] FROM #Test WHERE [ParentID] = @QueryId
UNION -- My chidren's children
SELECT [ID] FROM #Test WHERE [ParentID] IN (SELECT [ID] FROM #Test WHERE [ParentID] = @QueryId)
DROP TABLE #Test
另一个好的解决方案,但它只是2级,如果你设置@QueryId = 5,结果是2,3应该是1,2,3,4作为1,2, 3在myParents的树中,4从我父母的一方来,无论如何非常感谢你,感谢所有的成员,我从你们每个人那里获取我需要的信息。 – RMohammed 2010-04-27 14:45:41
实际数据有多深? CTE可以完成这项工作......然而,当我必须这样做时,我只是手动创建了一个节点树(如表格),允许我通过BETWEEN' – 2010-04-27 12:00:44
查询数据的深度是3或4级 – RMohammed 2010-04-27 12:22:38
你有两行ID = 3吗?那么我认为这个ID并不是唯一的,或者是最终确定的? – 2010-04-27 12:40:56