sql遞歸with
⑴ sql 怎麼遞歸查詢的方法:
1.創建測試表,createtabletest_connect(idnumber,p_idnumber);
⑵ oracle中SQL遞歸查詢
要看這個「下級人數」是怎麼定義的,如果只是記錄中PID值是父類ID的人數之和,那麼就用with,先按PID做一個統計結果集,然後用原本數據表作為查詢目標表,左外連接with的結果集,並將人數相加;
如果是要所有下級的人數之和,則需要要遞歸函數來計算人數。
⑶ SQL資料庫實現遞歸查詢的幾種代碼方法
SQL 資料庫 實現遞歸查詢的幾種代碼方法 表結構
ProctCategory
CategoryID Level ParentCategoryID
數據
T SQL
WITH CategoryTemp(CategoryID ParentCategoryID) 臨時表用來保存查到的Category
(
SELECT CategoryID ParentCategoryID FROM ProctCategory WHERE ParentCategoryID<= 將所有的第一層查出來作為初始數據 需要查第幾層或者哪個ParentCategoryID下面所有的 N層 把ParentCategoryID賦相關的值即可
UNION ALL 查詢N層
SELECT pc CategoryID ParentCategoryID FROM ProctCategory pc
LEFT JOIN CategoryTemp ct ON pc ParentCategoryID=ct CategoryID
WHERE ParentCategoryID> 因為第一層前面已經查出來了 所以這里把第一層篩選掉
)
SELECT CategoryID ParentCategoryID FROM CategoryTemp
結果
裂鍵檔
如果把ParentCategoryID賦為 結果則為
實例
ID是否為部門 部門名 上級ID y 部門 y 部門 n 張三 n 李二 y 部門 n 王五 y 部門3亮賀 n 小三 我想找詢 ID 值為 下級的所有人員包括下級部門的所有人員
創建查詢函數 create function f_id( @id int 要查詢的id )returns @re table(id int level int) as begin declare @l int set @l= insert @re select id @l from 表 where 上級id=@id while @@rowcount> begin set @l=@l+ insert @re select a id @l from 表 a join @re b on a 上級id=b id and b level=@l end return end go
調用函數進行查詢 select a * from 表 a join f_id( ) b on a id=b id
聯合查詢
測試數據 create table 表(ID int 是否為部門 char( ) 部門名 varchar( ) 上級ID int) insert 表 select y 部門 union all select y 部門 union all肆亂 select n 張三 union all select n 李二 union all select y 部門 union all select n 王五 union all select y 部門 union all select n 小三 go
創建查詢函數 create function f_id( @id int 要查詢的id )returns @re table(id int level int) as begin declare @l int set @l= insert @re select id @l from 表 where 上級id=@id while @@rowcount> begin set @l=@l+ insert @re select a id @l from 表 a join @re b on a 上級id=b id and b level=@l end return end go
調用函數進行查詢 select a * from 表 a join f_id( ) b on a id=b id go
刪除測試 drop table 表 drop function f_id
/* 測試結果
ID 是否為部門 部門名 上級ID n 小三
lishixin/Article/program/MySQL/201311/29557
⑷ SQL遞歸查詢知多少
1、基本概念
公用表表達式 (CTE) 可以認為是在單個 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 語句的執行范圍內定義的臨時結果集。公用表表達式可以包括對自身的引用,這種表達式稱為遞歸公用表表達式。
創建遞歸查詢。有關詳細信息,請參閱使用公用表表達式的遞歸查詢。
在不需要常規使用視圖時替換視圖,也就是說,不必將定義存儲在元數據中。
啟用按從標量嵌套 select 語句派生的列進行分組,或者按不確定性函數或有外部訪問的函數進行分組。
在同一語句中多次引用生成的表。
MSDN上對CTE的介紹
T-SQL查詢進階--詳解公用表表達式(CTE)
CTE 的基本語法結構如下:
WITH expression_name [ ( column_name [,...n] ) ]
AS
( CTE_query_definition )
--只有在查詢定義中為所有結果列都提供了不同的名稱時,列名稱列表才是可選的。
--運行 CTE 的語句為:
SELECT <column_list> FROM expression_name;
即三個部分:
公用表表達式的名字(在WITH關鍵字之後)
查詢的列名(可選)
緊跟AS之後的SELECT語句(如果AS之後有多個對公用表的查詢,則只有第一個查詢有效)
⑸ SQL函數怎麼實現遞歸
declare @b nvarchar(2) =1;
with abc(id,b_PriorID,level)as
(
select id,b_PriorID,0 level from #tt where b_PriorID =@b
union all
select a.id,a.b_PriorID,t.level+1 from #tt a
inner join abc t
on t.id=a.b_PriorID
)
select * from abc
你試試可以么?