當前位置:首頁 » 編程語言 » sql遞歸with

sql遞歸with

發布時間: 2023-11-08 16:45:05

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
你試試可以么?

熱點內容
文件夾目錄鏈接 發布:2025-01-31 08:24:22 瀏覽:948
ftpdos命令上傳 發布:2025-01-31 08:14:44 瀏覽:105
intenumjava 發布:2025-01-31 08:14:37 瀏覽:802
android3x 發布:2025-01-31 08:13:03 瀏覽:600
如何購買安卓版live2d 發布:2025-01-31 08:13:01 瀏覽:279
python交互輸入 發布:2025-01-31 08:12:53 瀏覽:427
requestdatapython 發布:2025-01-31 08:02:01 瀏覽:44
javades加密工具 發布:2025-01-31 07:54:04 瀏覽:244
電話如何配置ip 發布:2025-01-31 07:48:48 瀏覽:300
2021賓士e300l哪個配置性價比高 發布:2025-01-31 07:47:14 瀏覽:656