with 关键字实现递归查询
生活随笔
收集整理的這篇文章主要介紹了
with 关键字实现递归查询
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
通常用來實現樹形結構
首先來看一下表數據
?
?以下代碼是遞歸查詢北京市的樹結構
WITH org AS (SELECT Code, name, parentCode, 1 AS levelFROM TestCity WHERE code = '01'UNION ALLSELECT t1.Code, t1.name, t1.parentCode, t2.level + 1 AS levelFROM TestCity t1 INNER JOIN org t2ON t1.parentCode = t2.Code ) SELECT * FROM org
?
注意:如果要在with表達式中計算,需要保證兩邊的type一致,如
?
WITH org AS (SELECT Code, name, parentCode, 1 AS level, tname = CAST('' as nvarchar(20))FROM TestCity WHERE code = '01'UNION ALLSELECT t1.Code, t1.name, t1.parentCode, t2.level + 1 AS level, tanme = CAST(N'|--' + t2.tname as nvarchar(20))FROM TestCity t1 INNER JOIN org t2ON t1.parentCode = t2.Code ) SELECT code ,parentCode, tname + name as name FROM org
再比較以下兩段從StackOverFolw中摘來的代碼
--報錯 Types don't match between the anchor and the recursive part in column "nm" of recursive query "cte". WITH cte AS (SELECT 1 as rn, 'name1' as nmUNION ALLSELECT rn + 1,nm = 'name' + CAST((rn + 1) as varchar(255))FROM cte a WHERE rn < 10) SELECT * FROM cte--正解 with cte as ( select 1 as rn, CAST('name1' AS VARCHAR(255)) as nm union all select rn+1,nm = CAST('name' + CAST((rn+1) as varchar(255)) AS VARCHAR(255)) from cte a where rn<10) select * from cte
轉載于:https://www.cnblogs.com/guangmangchen/p/6688883.html
總結
以上是生活随笔為你收集整理的with 关键字实现递归查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 外边距塌陷之clearance
- 下一篇: Eclipse上安装springsour