如何在SQL Server中使用self Join来在单个表上映射子父项?
我有以下表格与子女父母的关系。如何在SQL Server中使用self Join来在单个表上映射子父项?
ID Title PageID IsParent ParentID IsActive 1 Dashboard 2125 True NULL True
2 Site Analytics 22 False NULL True
3 SEO Management 1 NULL NULL True
4 Mail Management 32 NULL NULL True
5 Build Mobile App 3214 NULL NULL True
6 Market Analytics 1321 NULL NULL True
7 Customize 235345 NULL NULL True
8 Reporter 253 NULL NULL True
9 Editor 545 NULL NULL True
10 News Template 45 NULL NULL True
11 Test Menu 0 True 3 True
NULL NULL NULL NULL NULL NULL
这里ParentID
定义了父母和孩子之间的关系。例如,在上面的表测试菜单是Site Analytics
的孩子。我有以下SQL查询。
SELECT P.ID
,P.Title AS Parent
,C.Title AS Child
,P.PageID
,P.IsParent
,P.ParentID
,P.IsActive
FROM [dbo].[ChildParent] P
LEFT JOIN [dbo].[ChildParent] C ON P.ID = C.ParentID
以下是输出结果。
1 Dashboard NULL 2125 1 NULL 1 2 Site Analytics NULL 22 0 NULL 1
3 SEO Management Test Menu 1 NULL NULL 1
4 Mail Management NULL 32 NULL NULL 1
5 Build Mobile App NULL 3214 NULL NULL 1
6 Market Analytics NULL 1321 NULL NULL 1
7 Customize NULL 235345 NULL NULL 1
8 Reporter NULL 253 NULL NULL 1
9 Editor NULL 545 NULL NULL 1
10 News Template NULL 45 NULL NULL 1
11 Test Menu NULL 0 1 3 1
基本上,我想实现的是:
1 Dashboard NULL 2125 1 NULL 1 2 Site Analytics NULL 22 0 NULL 1
3 SEO Management NULL 1 NULL NULL 1
4 Mail Management NULL 32 NULL NULL 1
5 Build Mobile App NULL 3214 NULL NULL 1
6 Market Analytics NULL 1321 NULL NULL 1
7 Customize NULL 235345 NULL NULL 1
8 Reporter NULL 253 NULL NULL 1
9 Editor NULL 545 NULL NULL 1
10 News Template NULL 45 NULL NULL 1
11 Test Menu SEO Management 0 1 3 1
回答:
你向后做。
FROM [dbo].[ChildParent] P LEFT JOIN [dbo].[ChildParent] C ON P.ParentID = C.ID
回答:
在查询试试这个小变化:
SELECT P.ID
,P.Title AS Parent
,C.Title AS Child
,P.PageID
,P.IsParent
,P.ParentID
,P.IsActive
FROM [dbo].[ChildParent] P
LEFT JOIN [dbo].[ChildParent] C ON isnull(P.ParentID, P.ID) = c.id and C.ParentID is not null
以上是 如何在SQL Server中使用self Join来在单个表上映射子父项? 的全部内容, 来源链接: utcz.com/qa/259366.html