Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
CTE: Common Table Express 指定临时命名的结果集
1, 当sql语句比较大时,可以用CTE将小结果集拆分,以便阅读
WITH mycre(id,name) AS ( select id ,name from mddepartment )
SELECT * FROM frmuser JOIN mycre ON frmuser.DepartmentID= mycre.id
注:1)CTE 之后必须直接使用,间隔sql语句就会失效
2)在用with时并不会执行查询,只是凑sql语句,只有当with后面的select *引用cte时才会执行
2,递归使用,依次引用自身。递归 CTE 定义至少必须包含两个 CTE 查询定义(一个定位点成员和一个递归成员)
WITH departments(id,Departname,depth) as(
SELECT id,Departname,1 depth FROM mdDepartment md
WHERE md.ParentID = 2 --找到广告商务部的直接子部门 定位点成员,depth指定深度
UNION ALL
SELECT md.id,md.Departname,depth+1 FROM mdDepartment md --找到子部门的子部门 递归成员
JOIN departments d ON md.ParentID = d.id
)
SELECT * FROM departments
注:1)定位点成员之间必须使用UNION ALL、UNION、INTERSECT、EXCEPT集合运算符,最后一个定位点成员与递归成员之间必须使用UNION ALL,递归成员之间也必须使用UNION ALL连接,定位点成员和递归成员中的字段数量和类型必须完全一致,递归成员的FROM子句只能引用一次CTE对象。
2)递归成员中不允许出现下列项
SELECT DISTINCT
GROUP BY
HAVING
标量聚合
TOP
LEFT、RIGHT、OUTER JOIN(允许出现 INNER JOIN)
子查询