MSDNの共通テーブル式の使用に示すように、CTEを次のように定義できます。
WITH expression_name [ ( column_name [,...n] ) ]
AS
( CTE_query_definition )
そしてそれを次のように使用します:
SELECT <column_list> FROM expression_name;
次の2つのCTEがあるとします
with cte1 as(
select name from Table1
)
with cte2(name) as(
select name from Table1
)
クエリは、内部クエリが同じであるため、両方のCTEに対して同じ結果を出力します。これら2つの違いは、cte2の(name)
宣言で列名()が定義されていることだけです。
両方のCTEを実行しても、実行計画に違いはありません。
私は知りたいだけです:
- CTE定義で列名を指定しない場合、どのような違いがありますか?
- CTEの作成時に列名を指定する必要がある/すべきではないのはなぜですか?
- 万が一クエリ実行プランに影響はありますか?(私が見た限りでは、何の違いもありません。)