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查询结果完全相同的临时表
临时表不允许重复创建,也不允许重复删除,因此需要在临时表前判断是否已经存在;

浙公网安备 33010602011771号