我有下表与子父关系。
身份证 | 标题 | 页面ID | 是家长 | 家长ID | 处于活动状态 |
---|---|---|---|---|---|
1 | 仪表板 | 2125 | 正确 | 空 | 正确 |
2 | 站点分析 | 22 | 错误 | 空 | 正确 |
3 | SEO管理 | 1 | 空 | 空 | 正确 |
4 | 邮件管理 | 32 | 空 | 空 | 正确 |
5 | 构建移动应用程序 | 3214 | 空 | 空 | 正确 |
6 | 市场分析 | 1321 | 空 | 空 | 正确 |
7 | 定制 | 235345 | 空 | 空 | 正确 |
8 | 记者 | 253 | 空 | 空 | 正确 |
9 | 编辑器 | 545 | 空 | 空 | 正确 |
10 | 新闻模板 | 45 | 空 | 空 | 正确 |
11 | 测试菜单 | 0 | 正确 | 3 | 正确 |
空 | 空 | 空 | 空 | 空 | 空 |
这里
ParentID
定义了父子关系。例如,在上表中,Test Menu是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
在您的查询中尝试这个小改变:
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
你正在倒退。
FROM [dbo].[ChildParent] P
LEFT JOIN [dbo].[ChildParent] C ON P.ParentID = C.ID