2016-08-18 3 views
0

エイリアスがどのようにジョインで動作するかについて、いくつか混乱しています。何人かのグーグルの後、私はCTEを使って私が望む振る舞いを得ることが分かったが、私の最初の試みが失敗した理由は明らかではない。要するにエイリアスSQL Serverに参加

- なぜこの仕事を行います。

WITH C AS 
(
    SELECT 
     * 
    FROM 
     dbo.Table1 as A 
    INNER JOIN 
     dbo.Table2 as B ON A.Col1 = B.Col1 
) 
SELECT C.Col2 
FROM C; 

をしかし、これはそうではありませんか?

SELECT 
    C.Col2 
FROM 
    (dbo.Table1 as A 
INNER JOIN 
    dbo.Table2 as B ON A.Col1 = B.Col1) as C; 
+1

「dbo.Table1」の直前に「SELECT FROM」が見つかりませんでした。 – Anton

+0

はい...それらは異なります.CTEにはselectがあり、サブテーブルにはありません。 –

答えて

1
SELECT 
    B.Col2 
FROM 
    (dbo.Table1 as A 
INNER JOIN 
    dbo.Table2 as B ON A.Col1 = B.Col1); 

、それは動作しますが、これを試してみてください。 Table1Table2の間のJOINによって生成された結果セットに新しい名前を付けようとしていたようです。そのような機能はSQLにはありません。結合後、結果セットは、両側の入力結果セットに適用されるエイリアスを使用して参照されます(例:AおよびB)。

結果セットの新しいエイリアスを作成するには、コメントでAntonが提案したように完全なサブクエリを作成するか、すでに見つかったCTEを使用します。あなたが混同されることが

は、あなたがそのようなオペレータによって生成された結果セットのための新しい名前を提供することができますPIVOTまたはAPPLY、などFROM句内で使用することができる他のいくつかの選択肢があることです。 JOINの場合、これを行う必要はありません(オプションもありません)。

+0

これはありがとうございました。 – learningAsIGo

0

()ブラケットは不要であるが)有効なのだろう

SELECT B.Col2 
FROM dbo.Table1 AS A 
INNER JOIN dbo.Table2 AS B ON A.Col1 = B.Col1 
関連する問題