SQL Server遞迴查詢
create table test_with(
pid int,
parentid int,
name varchar(60)
)
insert into test_with values(1, null, 'A')
insert into test_with values(2, null, 'B')
insert into test_with values(3, null, 'C')
insert into test_with values(4, 1, 'A1')
insert into test_with values(5, 1, 'A2')
insert into test_with values(6, 1, 'A3')
update test_with set name = 'A2' where pid = 5
update test_with set name = 'A3' where pid = 6
select * from test_with
insert into test_with values(7, 4, 'A11')
insert into test_with values(8, 5, 'A22')
insert into test_with values(9, 6, 'A33')
with t(pid, parentid, name, level) as (
select pid, parentid, name, 0 as level from test_with where parentid is null
and pid = 1
union all
select test_with.pid, test_with.parentid, test_with.name, level+1 from t , test_with
where t.pid = test_with.parentid and test_with.parentid is not null
and t.pid <> test_with.pid
)
select * from t where level <= 3 OPTION(MAXRECURSION 5000)
with t(pid, parentid, name,parentname, level) as (
select pid, parentid, name, cast(null as varchar(60)) as parentname,0 as level from test_with where parentid is null
union all
select test_with.pid, test_with.parentid, test_with.name , t.name as parentname, level+1 from t , test_with
where t.pid = test_with.parentid
)
select * from t where level <= 3 OPTION(MAXRECURSION 5000)
可以用來模擬start with..connect by
在test_with.pid上糾結了許久,不小心寫成t.pid,結果造成無限的遞迴出錯:
訊息 530,級別 16,狀態 1,第 1 行
語句被終止。完成執行語句前已用完最大遞迴 5000。
這個特性在Oracle 11g, 12c也已支援
pid int,
parentid int,
name varchar(60)
)
insert into test_with values(1, null, 'A')
insert into test_with values(2, null, 'B')
insert into test_with values(3, null, 'C')
insert into test_with values(4, 1, 'A1')
insert into test_with values(5, 1, 'A2')
insert into test_with values(6, 1, 'A3')
update test_with set name = 'A2' where pid = 5
update test_with set name = 'A3' where pid = 6
select * from test_with
insert into test_with values(7, 4, 'A11')
insert into test_with values(8, 5, 'A22')
insert into test_with values(9, 6, 'A33')
with t(pid, parentid, name, level) as (
select pid, parentid, name, 0 as level from test_with where parentid is null
and pid = 1
union all
select test_with.pid, test_with.parentid, test_with.name, level+1 from t , test_with
where t.pid = test_with.parentid and test_with.parentid is not null
and t.pid <> test_with.pid
)
select * from t where level <= 3 OPTION(MAXRECURSION 5000)
with t(pid, parentid, name,parentname, level) as (
select pid, parentid, name, cast(null as varchar(60)) as parentname,0 as level from test_with where parentid is null
union all
select test_with.pid, test_with.parentid, test_with.name , t.name as parentname, level+1 from t , test_with
where t.pid = test_with.parentid
)
select * from t where level <= 3 OPTION(MAXRECURSION 5000)
可以用來模擬start with..connect by
在test_with.pid上糾結了許久,不小心寫成t.pid,結果造成無限的遞迴出錯:
訊息 530,級別 16,狀態 1,第 1 行
語句被終止。完成執行語句前已用完最大遞迴 5000。
這個特性在Oracle 11g, 12c也已支援
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8520577/viewspace-1062114/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MS SQL Server的遞迴查詢SQLServer遞迴
- MS SQL Server的遞迴查詢(2)SQLServer遞迴
- Sql Server 使用CTE實現遞迴查詢SQLServer遞迴
- Oracle遞迴查詢sqlOracle遞迴SQL
- sql無限遞迴查詢SQL遞迴
- sql遞迴查詢子級SQL遞迴
- Oracle SQL的遞迴查詢OracleSQL遞迴
- sql server遞迴SQLServer遞迴
- SQL server資料庫with as子句與遞迴查詢的實現SQLServer資料庫遞迴
- SQL Server 2005資料庫中表的遞迴查詢SQLServer資料庫遞迴
- oracle中的遞迴sql查詢 connect by prior實現遞迴Oracle遞迴SQL
- PostgreSQL 遞迴查詢SQL遞迴
- PostgreSQL=>遞迴查詢SQL遞迴
- SqlServer遞迴查詢SQLServer遞迴
- ORACLE 遞迴查詢Oracle遞迴
- sqlalchemy 遞迴查詢SQL遞迴
- SQL with as 的用法 以及遞迴函式的寫法 遞迴層次查詢SQL遞迴函式
- 一個遞迴查詢遞迴
- 遞迴查詢子元素遞迴
- 使用SQL SERVER 2005/2008 遞迴CTE查詢樹型結構SQLServer遞迴
- grep遞迴查詢子目錄遞迴
- SQL Server 查詢分解SQLServer
- java-遞迴(檔案查詢)Java遞迴
- 關於樹型結構資料遞迴查詢,轉非遞迴查詢的實現遞迴
- SQL Server將直接傳遞查詢作為表使用的方法SQLServer
- SQL SERVER 查詢鎖資訊SQLServer
- SQL server跨庫查詢SQLServer
- Sql Server系列:子查詢SQLServer
- SQL server 查詢語句SQLServer
- SQL Server 分散式查詢SQLServer分散式
- SQL SERVER 動態查詢SQLServer
- SQL Server 跨域查詢SQLServer跨域
- 遞迴-M--二分查詢遞迴
- 遞迴樹形查詢所有分類遞迴
- 我對Postgresql遞迴查詢的理解SQL遞迴
- 11GR2遞迴With子查詢遞迴
- Mysql 實現樹狀遞迴查詢MySql遞迴
- SQL Server中CTE的另一種遞迴方式-從底層向上遞迴SQLServer遞迴