Sql With as用法
With as语法,可以代替常规的子查询,可读性要比其好。其定义了一个公共sql表达式(Common Table Expression),取一个别名,后面的查询就可以用它,一次分析,多次使用。在oracle、mysql8、postgreSql都有支持
WITH
cte_name1 AS (
-- 第一个临时结果集的查询语句
),
cte_name2 AS (
-- 第二个临时结果集的查询语句,可以引用cte_name1
),
...
SELECT
-- 主查询语句,可以引用cte_name1、cte_name2等
FROM
...
如果要定义多个表达式也可以直接在with后面加,逗号分隔。
这个语法还可以用来做递归查询
with RECURSIVE org as (
select org_id
from s_org
where org_id = 1
union all
select sub.org_id
from s_org as sub
inner join org parent on sub.p_org = parent.org_id
)
以org_id = 1为初始条件,递归查询出其所有子数据,关联条件为sub.p_org = parent.org_id,通过with as就可以将这些数据定义成一个临时表供后续使用