我已经看到这里多次提到 Oracle WITH 子句,用于对这样的子查询进行别名:
WITH myData AS (SELECT id, text FROM SomeTable)
SELECT myData from SomeOtherTable
是否有任何版本的 SQL Server 支持此功能?如果没有,他们不这样做有什么特别的原因吗?表现?潜在的错误使用?
我已经看到这里多次提到 Oracle WITH 子句,用于对这样的子查询进行别名:
WITH myData AS (SELECT id, text FROM SomeTable)
SELECT myData from SomeOtherTable
是否有任何版本的 SQL Server 支持此功能?如果没有,他们不这样做有什么特别的原因吗?表现?潜在的错误使用?
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 中是可选的)
是的,SQL2005 和 SQL2008 都支持这个。它们被称为公用表表达式。