求通过子类ID 查询所有父类及父类同级的语句

时间:2022-09-24 14:23:49
求通过子类ID 查询所有父类及父类同级的语句
求通过子类ID 查询所有父类及父类同级的语句

比如我通过ID 4的“企业文化” 能够查询到 

视频
培训
咨询  以及与“视频”同级的其他项。

8 个解决方案

#1


哥,你最起码列名也要截出来啊。不然怎么写语句啊?用cte就可以实现。还有不要截图,想复制数据都不行。下班了,没人回复我就回去再回复你,

#2


嘿嘿 数据库结构 就是简单的 
id name    pid 
1  文档     0
2  视频     0
3  培训     2
4  咨询     2
5  企业文化 3

#3


;with f as
(
select * from tb where id=4
union all
select a.* from tb a join f on a.id=b.pid
)

select * from f

#4


select * from tb where pid=(select pid from tb tt where tt.id=3)

这样?

#5


引用 3 楼 fredrickhu 的回复:
SQL code?12345678;with f as(select * from tb where id=4union allselect a.* from tb a join f on a.id=b.pid) select * from f

不行 这样只能获取到父节点 不能获取到父节点的同级

#6



USE tempdb
GO

-- 建立演示环境
CREATE TABLE Dept(
 id int PRIMARY KEY, 
 parent_id int,
 name nvarchar(20))
INSERT Dept
SELECT 0, 0, N'<全部>' UNION ALL
SELECT 1, 0, N'财务部' UNION ALL
SELECT 2, 0, N'行政部' UNION ALL
SELECT 3, 0, N'业务部' UNION ALL
SELECT 4, 0, N'业务部' UNION ALL
SELECT 5, 4, N'销售部' UNION ALL
SELECT 6, 4, N'MIS' UNION ALL
SELECT 7, 6, N'UI' UNION ALL
SELECT 8, 6, N'软件开发' UNION ALL
SELECT 9, 8, N'内部开发'
GO


DECLARE @id int 
SET @id = 6
;WITH
DEPTS AS(
 -- 定位点成员
 SELECT * FROM Dept
 WHERE parent_id = @id
 UNION ALL
 -- 递归成员, 通过引用CTE自身与Dept基表JOIN实现递归
 SELECT A.*
 FROM Dept A, DEPTS B
 WHERE A.id = B.parent_id
 and A.id>a.parent_id
)
SELECT distinct * FROM DEPTS
GO



--一个例子   子节点的所有父节点

#7


求通过子类ID 查询所有父类及父类同级的语句在我有时间的时候你不回复,现在都给别人回复光了。

#8


谢谢 上午自己解决了 结贴都有分 就那么点分

#1


哥,你最起码列名也要截出来啊。不然怎么写语句啊?用cte就可以实现。还有不要截图,想复制数据都不行。下班了,没人回复我就回去再回复你,

#2


嘿嘿 数据库结构 就是简单的 
id name    pid 
1  文档     0
2  视频     0
3  培训     2
4  咨询     2
5  企业文化 3

#3


;with f as
(
select * from tb where id=4
union all
select a.* from tb a join f on a.id=b.pid
)

select * from f

#4


select * from tb where pid=(select pid from tb tt where tt.id=3)

这样?

#5


引用 3 楼 fredrickhu 的回复:
SQL code?12345678;with f as(select * from tb where id=4union allselect a.* from tb a join f on a.id=b.pid) select * from f

不行 这样只能获取到父节点 不能获取到父节点的同级

#6



USE tempdb
GO

-- 建立演示环境
CREATE TABLE Dept(
 id int PRIMARY KEY, 
 parent_id int,
 name nvarchar(20))
INSERT Dept
SELECT 0, 0, N'<全部>' UNION ALL
SELECT 1, 0, N'财务部' UNION ALL
SELECT 2, 0, N'行政部' UNION ALL
SELECT 3, 0, N'业务部' UNION ALL
SELECT 4, 0, N'业务部' UNION ALL
SELECT 5, 4, N'销售部' UNION ALL
SELECT 6, 4, N'MIS' UNION ALL
SELECT 7, 6, N'UI' UNION ALL
SELECT 8, 6, N'软件开发' UNION ALL
SELECT 9, 8, N'内部开发'
GO


DECLARE @id int 
SET @id = 6
;WITH
DEPTS AS(
 -- 定位点成员
 SELECT * FROM Dept
 WHERE parent_id = @id
 UNION ALL
 -- 递归成员, 通过引用CTE自身与Dept基表JOIN实现递归
 SELECT A.*
 FROM Dept A, DEPTS B
 WHERE A.id = B.parent_id
 and A.id>a.parent_id
)
SELECT distinct * FROM DEPTS
GO



--一个例子   子节点的所有父节点

#7


求通过子类ID 查询所有父类及父类同级的语句在我有时间的时候你不回复,现在都给别人回复光了。

#8


谢谢 上午自己解决了 结贴都有分 就那么点分