質問

これは一種のSQL初心者の質問ですが、ここに行きます。

ユーザー定義関数の例に基づいて作成したSQLクエリ(SQL Server 2005)があります:

SELECT 
    CASEID,
    GetNoteText(CASEID)
FROM 
( 
    SELECT 
        CASEID 
    FROM 
        ATTACHMENTS 
    GROUP BY 
        CASEID 
) i
GO 
U FROM句の後。クエリはiで正常に機能しますが、それなしでは失敗します。 「i」の意味は何ですか?

編集:ジョエルが以下で述べたように、それはキーワードではありません

役に立ちましたか?

解決

FROM句でサブクエリを使用する場合、クエリに名前を付ける必要があります。名前は実際には重要ではないため、「i」や「a」などの単純なものがよく選択されます。しかし、好きな名前をそこに置くことができます-'i'自体には意味がなく、キーワードではありません。

非常に複雑なクエリがある場合、サブクエリを他のクエリまたはテーブルと結合する必要がある場合があります。その場合、名前はより重要になり、より意味のあるものを選択する必要があります。

他のヒント

iは(サブクエリ)に名前を付けます。これは必須であり、以降の結合にも必要です。

次のように、結合されたテーブル間で競合する列名がある場合、外部クエリの列の前にサブクエリ名を付ける必要があります。

SELECT 
    c.CASEID, c.CASE_NAME,
    a.COUNT AS ATTACHMENTSCOUNT, o.COUNT as OTHERCOUNT,
    dbo.GetNoteText(c.CASEID)
FROM CASES c
LEFT OUTER JOIN
( 
    SELECT 
        CASEID, COUNT(*) AS COUNT
    FROM 
        ATTACHMENTS 
    GROUP BY 
        CASEID 
) a
ON a.CASEID = c.CASEID
LEFT OUTER JOIN
(
    SELECT 
        CASEID, COUNT(*) AS COUNT
    FROM 
        OTHER
    GROUP BY 
        CASEID 
) o
ON o.CASEID = c.CASEID

" i" selectステートメントに有効なテーブル名を付けています。 「AS i」と書くこともできます(私は思う-私はMSSQLServerの男ではありません)。

他の人が述べたように、それはサブクエリのテーブル名エイリアスです。

サブクエリの外部では、i.CASEIDを使用してサブクエリの結果を参照できます。

この例ではあまり有用ではありませんが、複数のサブクエリがある場合、これは非常に重要な曖昧性解消ツールです。

ただし、より適切な変数名を選択します。 「temp」でもより良いです。

iはサブクエリに名前を付けるので、多数のサブクエリを含む複雑なクエリがあり、フィールドにアクセスする必要がある場合は、明確な方法でアクセスできます。

より長いクエリを書き始めるときに混乱を避けるために、サブクエリにわかりやすい名前を付けることをお勧めします。 idは正しいもの、またはどのテーブル/クエリc.nameが取得されているかです。

学んだ教訓は、コードを継承する人を考えることです。他の人が言ったように、コードが次のように書かれていた場合:

SELECT DT1.CASEID, GetNoteText(DT1.CASEID) 
FROM (
   SELECT CASEID 
   FROM ATTACHMENTS
   GROUP BY CASEID
) AS DT1 (CASEID);

その後、読者がそれを理解し、「派生テーブル」を暗示する「DT1」に気付く可能性が高くなります。

"派生テーブル" FROM句でサブクエリを使用するための技術用語です。

SQL Server Books Onlineの構文は、この場合table_aliasがオプションではないことを示しています。 " table_alias"は角括弧で囲まれておらず、Transact-SQL構文規則によると、角括弧内のものはオプションです。キーワード" AS"ただし、括弧で囲まれているため、オプションです...

    derived_table [AS] table_alias [(column_alias [、... n])]

FROM(Transact-SQL):
http://msdn.microsoft.com/en-us /library/ms177634(SQL.90).aspx

Transact-SQLの構文規則:
http://msdn.microsoft.com/en-us /library/ms177563(SQL.90).aspx

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top