0

我已经看到这里多次提到 Oracle WITH 子句,用于对这样的子查询进行别名:

WITH myData AS (SELECT id, text FROM SomeTable)
SELECT myData from SomeOtherTable

是否有任何版本的 SQL Server 支持此功能?如果没有,他们不这样做有什么特别的原因吗?表现?潜在的错误使用?

4

2 回答 2

5

SQL Server 2005 及更高版本。

我想补充一点,您可以将这些堆叠起来以获得良好的效果:

WITH A AS (
    SELECT * FROM X
), B AS (
    SELECT * FROM A
), C AS (
    SELECT * FROM B
)
SELECT * FROM C

你甚至可以这样做:

WITH A AS (
), B AS (
)
SELECT * FROM A INNER JOIN B ON whatever

还要注意 WITH 必须是语句中的第一个关键字,所以你经常看到它写成:

;WITH A AS (
)

这基本上终止了前面的语句(分号在 T-SQL 中是可选的)

于 2010-07-08T03:50:30.133 回答
4

是的,SQL2005 和 SQL2008 都支持这个。它们被称为公用表表达式

于 2010-07-08T00:43:22.083 回答