数据库递归查询(CET)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值