with
WITH 子句是一种临时表,用于在同一查询中定义和引用复杂查询。它允许将重复或复杂的子查询存储在命名表中,从而简化查询并提高性能。
1.创建临时表
WITH temp_table AS (
SELECT column1, column2
FROM some_table
WHERE column3 = 'value'
)
SELECT *
FROM temp_table
WITH 子句创建一个临时表,指定了要存储在临时表中的查询结果集,其名称由temp_table 指定。子查询可以是任何有效的 SQL 查询。在后续的查询中,可以引用临时。临时表在查询执行期间存在,但在查询完成后被删除。
2. 递归查询
-- RECURSIVE 是必要关键字
-- 将第一次查询的结果赋值给了临时表,然后将临时表和递归表做双表联查
WITH RECURSIVE temp (col1, col2, ..., coln) AS (
-- 递归部分
-- 第一次查询结果
SELECT
init_table.col1,
init_table.col2,
...,
init_table.coln
FROM init_table
UNION ALL
SELECT
temp.col1,
temp.col2,
...,
temp.coln
FROM temp , init_table
WHERE temp.condition -- 终止条件
)
-- 终止条件部分
SELECT * FROM temp ;
3. WITH语句中使用多个查询
WITH temp_table1 AS (
SELECT column1, column2
FROM some_table
WHERE column3 = 'value'
), temp_table2 AS (
SELECT column4, column5
FROM another_table
WHERE column6 = 'value'
)
SELECT *
FROM temp_table1
JOIN temp_table2 ON temp_table1.column1 = temp_table2.column4
————————————————
版权归原文作者所有
参考原文链接:
https://blog.csdn.net/qq_38337053/article/details/138756497
https://blog.csdn.net/ChinaLiyq/article/details/131940087

浙公网安备 33010602011771号