Sql With as用法

380 阅读1分钟

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就可以将这些数据定义成一个临时表供后续使用