Skip to main content

WITH 子句

WITH 子句提供了一种为大型查询编写补充语句的方法。这些语句也称为“通用表表达式(Common Table Expressions,CTEs)”,可以看作是为一个查询定义临时表。

它有助于将复杂的大型查询分解成更简单、易读的形式,在多次执行子查询时特别有用。它只需计算一次聚合,然后就可以在查询中重复引用其名称。

CTE 可以相互引用,也可以嵌套。必须先定义 WITH 子句,才可在查询中使用。

下面是带有可选 WITH 子句的 SELECT 语句的基本句法:

WITH name_for_summary_data AS (SELECT statement)
SELECT columns
FROM name_for_summary_data

CTE 基本示例:

-- 创建一个名为 “cte” 的 CTE,并在主查询中使用
WITH cte AS (SELECT 35 AS x)
SELECT * FROM cte;
┌────┐
x
├────┤
35
└────┘
-- 创建两个 CTE,其中第二个 CTE 引用第一个 CTE
WITH cte AS (SELECT 35 AS i),
cte2 AS (SELECT i*100 AS x FROM cte)
SELECT * FROM cte2;
┌──────┐
x
├──────┤
3500
└──────┘