次のようにサブクエリをエイリアシングするために、ここで数回 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
Also note that WITH must be the first keyword in a statement, so you often see it written as:
;WITH A AS (
)
Which basically terminates the previous statement (semicolons are kind of optional in T-SQL)
はい、SQL2005 と SQL2008 の両方がこれをサポートしています。これらは共通テーブル式と呼ばれます。