sql 根据子级查询所有父级

Sql中同一张表内如何根据子记录查询出所有父级/上级记录

以常见的公司/部门举例,

公司/部门Id 公司/部门名称 上级公司/部门Id
1 我是集团 0
2 我是子公司 1

|在已知公司/部门Id=2的记录下,查询出该公司/部门的所有父级或者上级公司/部门;

WITH TEMP AS
(
SELECT * FROM [公司/部门表名] WHERE Id = 2 //这里的ID是已知公司/部门的ID,也就是2
UNION ALL
SELECT FC.* FROM TEMP,[公司/部门表名] FC WHERE TEMP.[上级公司/部门Id的列名]=FC.Id
)
SELECT * FROM TEMP;//这句代码必须紧跟在上面的括号后,否则会报错

|通常上述代码作为查询需求已经非常满足,但是如果要对查询出来的数据进行操作还需要借助临时表;

if(OBJECT_ID('tempdb..#tablel')) is not null
		begin
			drop table #tablel
		end
WITH TEMP AS
(
SELECT * FROM [公司/部门表名] WHERE Id = 2 //这里的ID是已知公司/部门的ID,也就是2
UNION ALL
SELECT FC.* FROM TEMP,[公司/部门表名] FC WHERE TEMP.[上级公司/部门Id的列名]=FC.Id
)
select * into #table from Temp//

|#table即为与Temp查询结果完全相同的临时表

临时表不允许重复创建,也不允许重复删除,因此需要在临时表前判断是否已经存在;

posted @ 2022-07-26 14:17  涯唰  阅读(1759)  评论(0)    收藏  举报