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

posted @ 2024-10-31 10:42  kiss_sheep  阅读(28)  评论(0)    收藏  举报