IF OBJECT_ID(
'[ta]'
)
IS
NOT
NULL
DROP
TABLE
[ta]
Go
CREATE
TABLE
ta([id]
INT
,[
name
] NVARCHAR(4),[parentid] NVARCHAR(2))
Go
INSERT
INTO
ta
SELECT
1,
'河北省'
,
'0'
UNION
ALL
SELECT
2,
'邢台市'
,
'1'
UNION
ALL
SELECT
3,
'石家庄市'
,
'1'
UNION
ALL
SELECT
4,
'张家口市'
,
'1'
UNION
ALL
SELECT
5,
'南宫'
,
'2'
UNION
ALL
SELECT
6,
'坝上'
,
'4'
UNION
ALL
SELECT
7,
'任县'
,
'2'
UNION
ALL
SELECT
8,
'清河'
,
'2'
UNION
ALL
SELECT
9,
'河南省'
,
'0'
UNION
ALL
SELECT
10,
'新乡市'
,
'9'
UNION
ALL
SELECT
11,
'aaa'
,
'10'
UNION
ALL
SELECT
12,
'bbb'
,
'10'
GO
--Start
;
with
district
as
(
select
*
from
ta
where
[
name
]=N
'河北省'
union
all
select
a.*
from
ta a,district b
where
a.parentid=b.id
)
select
*
from
district
--Result:
/*
id
name
parentid
----------- ---- --------
1 河北省 0
2 邢台市 1
3 石家庄市 1
4 张家口市 1
6 坝上 4
5 南宫 2
7 任县 2
8 清河 2
*/
WITH district
--查询列
(PID, FDepartmentName,FState, FFatherName) AS
--父表
(SELECT PID, FDepartmentName,FState,CONVERT(nvarchar(50), '') AS FFatherName FROM dbo.T_Department WHERE (FParentUserID IS NULL or FParentUserID=0)
UNION ALL
--子表(注意是b的FDepartmentName)
SELECT a.PID, a.FDepartmentName,a.FState,b.FDepartmentName AS FFatherName FROM dbo.T_Department AS a
--关系
INNER JOIN district AS b ON a.FParentUserID = b.PID)
--查询
SELECT PID, FDepartmentName,FState, FFatherName
FROM district AS c
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)