WITH AS短语,也叫做子查询部分(subquery factoring),定义一个sql 片段,改sql 片段会被整个sql语句用到。其中最实用的功能就是数据的递归,递归的原理:递归包括至少两个查询,一个查询作为递归的基点也就是起点,另一个查询作为递归的成员。
一、定义一个公司(company)表 ,总公司下面包含子公司,子公司下面又包含分办事处
CREATE TABLE [dbo].[Company](
[id] [nvarchar](50) NOT NULL, //Id 主键
[companyName] [nvarchar](50) NULL, //公司名称
[pId] [nvarchar](50) NULL //父节点id
) ON [PRIMARY]
二、 插入数据到公司表
insert into Company(id,companyName,pid)values('A','A总公司','/') //总公司
insert into Company(id,companyName,pid)values('B','B分公司01','A') //分公司
insert into Company(id,companyName,pid)values('C','C分公司02','A') //分公司
insert into Company(id,companyName,pid)values('B1','B办事处','B') //办事处
insert into Company(id,companyName,pid)values('B2','B办事处','B') //办事处
insert into Company(id,companyName,pid)values('B3','B办事处','B') //办事处
insert into Company(id,companyName,pid)values('C1','C办事处','C') //办事处
insert into Company(id,companyName,pid)values('C2','C办事处','C') //办事处
insert into Company(id,companyName,pid)values('C3','C办事处','C') //办事处