1、sql with as
1. CTE后面必须直接跟使用CTE的SQL语句(如select、insert、update等),否则,CTE将失效。如下面的SQL语句将无法正常使用CTE:
1 WITH a1 AS ( 2 SELECT DISTINCT 3 source_milk_cont_id AS cont_id 4 FROM 5 z_proc_trace_main 6 7 ),
2. CTE后面也可以跟其他的CTE,但只能使用一个with,多个CTE中间用逗号(,)分隔,如下面的SQL语句所示:
1 WITH a1 AS ( 2 SELECT DISTINCT 3 source_milk_cont_id AS cont_id 4 FROM 5 z_proc_trace_main 6 7 ), 8 a2 AS ( 9 SELECT 10 source_milk_cont_id AS cont_id, 11 MAX (end_time) AS last_clear_time 12 FROM 13 z_proc_trace_main 14 WHERE 15 customer_office_id = '1' 16 AND is_clear_count = 1 17 18 GROUP BY 19 source_milk_cont_id 20 )
4. CTE 可以引用自身,也可以引用在同一 WITH 子句中预先定义的 CTE。不允许前向引用。
5. 不能在 CTE_query_definition 中使用以下子句:
(1)COMPUTE 或 COMPUTE BY
(2)ORDER BY(除非指定了 TOP 子句)
(3)INTO
(4)带有查询提示的 OPTION 子句
(5)FOR XML
(6)FOR BROWSE
2、oracle with as
1.With查询语句不是以select开始的,而是以“WITH”关键字开头。
2.WITH AS短语,也叫做子查询部分,定义一个SQL片断后,该SQL片断可以被整个SQL语句所用到。有的时候,with as是为了提高SQL语句的可读性,减少嵌套冗余。
使用with as有如下好处
1、可以轻松构建一个临时表,通过对这个表数据进行再处理。但是他比临时表更强大,临时表在会话结束才会自动被P清除,但with as临时表查询完成后就被清除了
2、复杂的查询会产生很大的sql,with as语法可以把一些公共查询提出来,也可以作为一个中间结果,可以使整个sql语句显得有条理些,提高可读性