1. 程式人生 > >T-SQL 遞迴查詢示例

T-SQL 遞迴查詢示例

1. 資料庫表建立

-- Create an Employee table.
CREATE TABLE dbo.MyEmployees
(
	EmployeeID smallint NOT NULL,
	FirstName nvarchar(30)  NOT NULL,
	LastName  nvarchar(40) NOT NULL,
	Title nvarchar(50) NOT NULL,
	DeptID smallint NOT NULL,
	ManagerID int NULL,
 CONSTRAINT PK_EmployeeID PRIMARY KEY CLUSTERED (EmployeeID ASC) 
);
-- Populate the table with values.
INSERT INTO dbo.MyEmployees VALUES 
 (1, N'Ken', N'Sánchez', N'Chief Executive Officer',16,NULL)
,(273, N'Brian', N'Welcker', N'Vice President of Sales',3,1)
,(274, N'Stephen', N'Jiang', N'North American Sales Manager',3,273)
,(275, N'Michael', N'Blythe', N'Sales Representative',3,274)
,(276, N'Linda', N'Mitchell', N'Sales Representative',3,274)
,(285, N'Syed', N'Abbas', N'Pacific Sales Manager',3,273)
,(286, N'Lynn', N'Tsoflias', N'Sales Representative',3,285)
,(16,  N'David',N'Bradley', N'Marketing Manager', 4, 273)
,(23,  N'Mary', N'Gibson', N'Marketing Specialist', 4, 16);

2.查詢語句

SELECT * FROM myemployees


;WITH CTE AS(
SELECT 
E.EmployeeID AS baseEmployeeID,
E.EmployeeID,
E.ManagerID,
0 AS level
FROM MyEmployees E


UNION All
    
SELECT
T.baseEmployeeID,
P.EmployeeID,
P.ManagerID,
T.level + 1
FROM CTE T
INNER JOIN MyEmployees P
ON T.ManagerID = P.EmployeeID
)


SELECT * FROM CTE
--WHERE managerId = 1
ORDER BY CTE.baseEmployeeID, level

相關推薦

T-SQL 查詢示例

1. 資料庫表建立 -- Create an Employee table. CREATE TABLE dbo.MyEmployees ( EmployeeID smallint NOT NULL, FirstName nvarchar(30) NOT NULL,

[SQL]T-Sql 查詢(給定節點查所有父節點、所有子節點的方法)

select IT rod nbsp pos UC with var 數據 -- 查找所有父節點with tab as( select Type_Id,ParentId,Type_Name from Sys_ParamType_V2_0 where Type_Id=31

sql查詢子類

平時工作中我們會遇到主從層次關係的結構資料,我們需要把資料取出來並且提現出層級就像樹形結構一樣,比如這樣的結構: 資料庫表結構如下,有個parent_id和sub_id,就是把兩者的關係儲存起來。 id為768的下面有769,770,771,772,780,781資料,同時

SQL 查詢(根據指定的節點向上獲取所有父節點,向下獲取所有子節點)

WITH TEMP AS  ( SELECT * FROM t_sys_org WHERE ID='0'   --表的ID UNION ALL  SELECT T0.* FROM TEMP,t_sys_org T0 WHERE TEMP.ID=T0.parent_id  

sql查詢所有子單位

with org(OrgID,OrgName,ParentID,[level]) as (select orgid,orgname,parentid,0 as [level] from SYSOrgwhere orgname like ''%'+ @DW +'%''unio

Sql Server】SQL SERVER 查詢

  SQL SERVER 2005之前的版本只能用函式方法實現,SQL SERVER 2005之後新增了CTE功能,可以利用CTE實現遞迴查詢;   CTE:公用表示式Common Table Expression 是SQL SERVER 2005版本之後引入的一個特性; #填充測試資料 1、

MyBatis自身集合巢狀,查詢目錄樹(適用於MySQL、ORACLE等資料庫,程式碼都寫在XML中,通過SQL完成)

JAVA程式碼實現(連結):MySql、Oracle(通用方法)遞迴查詢生成檔案目錄樹(JAVA實現 遞迴過程中不訪問資料庫,遞迴之前只訪問兩次 進行遞迴前資料準備)   以下是XML中實現檔案樹的查詢、遞迴 場景:根據交易編碼,查詢檔案樹 檔案、資料夾都存放TRADER_

SQL Server 2008中的CTE查詢得到一棵樹

with CTE as     (      -->Begin 一個定位點成員       select ID, Name,Parent,cast(Name as nvarchar(max)) as TE,           ROW_NUMBER()over(order by getdat

SQL SERVER 進行查詢

有如下資料表 假如我們要查詢ID為003的資料的所有子節點我們可以使用CTE 遞迴查詢完成... if OBJECT_ID('tb','N') is not null drop table tb; create table tb(id varchar(3) ,

Sql(用with 實現查詢

1.遞迴原理(摘自網上)    遞迴CTE最少包含兩個查詢(也被稱為成員)。第一個查詢為定點成員,定點成員只是一個返回有效表的查詢,用於遞迴的基礎或定位點。第二個查詢被稱為遞迴成員,使該查詢稱為遞迴成

SQL server 樹形查詢

1,原始查詢 原始表格查詢: select * from dbo.T_DeptInfo; 原始表格查詢結果: 2,遞迴查詢 -- with 一個臨時表(括號裡包括的是你要查詢的列名) with tem_table(dept_id,par

SQL Server 中的 CTE 查詢

name                                               senior                                             level   --------------------------------------------

SQL 語句查詢 With AS 查詢所有子節點

create table #EnterPrise (   Department nvarchar(50),--部門名稱   ParentDept nvarchar(50),--上級部門   DepartManage nvarchar(30)--部門經理 ) insert into #EnterPri

DB2通過SQL實現查詢 (根據子機構查詢機構所屬樹)

create table  MAIN_NODE ( MLA_ID               INTEGER     not null,   MLA_ROOTID          INTEGER,                     MLA_PARENTID    

sql語句查詢(start with)

寫程式碼時碰到要弄清楚Oracle的role之間的傳遞關係,就是有role A的話,可以通過grant A to B,把A賦予給B,又通過grant B to C .那我想知道所有role中,有哪些role具有A的許可權.上網一查發現有個遞迴查詢,不過都講的不是

一句SQL實現MYSQL的查詢

ID 父ID 父到子之間級數 父到子路徑 ------ ------ ------------ --------------- 1 0 0 ,0 2 1 1

Oracle sql,mybatis的查詢,與儲存過程呼叫

Oralce 遞迴sql    一、查詢所有子節點 SELECT * FROM district ST

Sql查詢

優化 value 內容 說明 其他 結構 菜單 等價 path /*Sql遞歸查詢*/ /* 實際就是把所有樹的節點查找出來 Oracle的一個表中也可以保存樹形結構信息,用start with...connect by等關鍵字 eg:創建

怎樣用SQL求各個Folder的檔案數

-- 資料準備 CREATE TABLE [dbo].[ContentObject] (Id NCHAR(10), Name NVARCHAR(500),ParentId NCHAR(10),Type NVARCHAR(50)); INSERT INTO [dbo].[ContentObject]

mybatis 實現查詢出樹結構節點

mybatis 實現遞迴查詢出樹結構節點 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.