什么是常用表表达式用于?

时间:2013-04-03 19:51:32

标签: sql ansi-sql

WITH Extracted_Sessions ( a,b ) AS 
(
   select a,b from db.tblnm
)

这个SQL做什么?有人可以解释一下吗?

2 个答案:

答案 0 :(得分:2)

这称为“公用表表达式”。如果我没有弄错的话,SQL 99中引入了一个SQL功能。

它与派生表非常相似。您的示例等同于

select a,b
from (
  select a,b from db.tblnm
) as Extracted_Sessions

主要区别在于您可以在查询中多次使用CTE,而对于派生表,您需要每次都重复基础查询,例如:

WITH Extracted_Sessions ( a,b ) AS 
(
   select a,b from db.tblnm
)
select *
from Extracted_Sessions e1
  join Extracted_Sessions e2 on e1.a = e.2b 

(注意这可能没有意义,只是为了证明你可以多次访问CTE。)

Postgres手册有一个很好的CTE教程:http://www.postgresql.org/docs/current/static/queries-with.html

答案 1 :(得分:0)

猜测那是一个公用表表达式:它的结构很像临时表:

使用名为Extracted_Sessions的列ab代替查询select a, b from db.tblnm ...在Extracted_Sessions上执行操作,就好像它是真实的东西。

通常用于构建递归查询。