次の方法で共有


入れ子になったエンティティ SQL クエリの作成

Entity SQL は豊富な機能言語です。 Entity SQL の構成要素は式です。 従来の SQL とは異なり、Entity SQL は表形式の結果セットに限定されません。Entity SQL では、リテラル、パラメーター、または入れ子になった式を含めることができる複雑な式の作成がサポートされています。 式の値は、パラメーター化することも、他の式で構成することもできます。

入れ子になった式

入れ子になった式は、返される型の値が受け入れられる任意の場所に配置できます。 例えば次が挙げられます。

-- Returns a hierarchical collection of three elements at top-level.
-- x must be passed in the parameter collection.
ROW(@x, {@x}, {@x, 4, 5}, {@x, 7, 8, 9})

-- Returns a hierarchical collection of one element at top-level.
-- x must be passed in the parameter collection.
{{{@x}}};

入れ子になったクエリは、プロジェクション句に配置できます。 例えば次が挙げられます。

-- Returns a collection of rows where each row contains an Address entity.
-- and a collection of references to its corresponding SalesOrderHeader entities.
SELECT address, (SELECT DEREF(soh)
                    FROM NAVIGATE(address, AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID) AS soh)
                    AS salesOrderHeader FROM AdventureWorksEntities.Address AS address

Entity SQL では、入れ子になったクエリは常にかっこで囲む必要があります。

-- Pseudo-Entity SQL
( SELECT …
FROM … )
UNION ALL
( SELECT …
FROM … );

次の例では、Entity SQL で式を適切に入れ子にする方法を示します。 方法: 2 つのクエリの和集合を並べ替えます

プロジェクション内のネストクエリ

プロジェクト句の入れ子クエリは、サーバー上のデカルト積クエリに変換される可能性があります。 SQL Server を含む一部のバックエンド サーバーでは、TempDB テーブルが非常に大きくなる可能性があり、サーバーのパフォーマンスに悪影響を与える可能性があります。

このようなクエリの例を次に示します。

SELECT c, (SELECT c, (SELECT c FROM AdventureWorksModel.Vendor AS c  ) As Inner2 FROM AdventureWorksModel.JobCandidate AS c  ) As Inner1 FROM AdventureWorksModel.EmployeeDepartmentHistory AS c

入れ子になったクエリの順序付け

Entity Framework では、入れ子になった式をクエリ内の任意の場所に配置できます。 Entity SQL ではクエリを柔軟に記述できるため、入れ子になったクエリの順序を含むクエリを記述できます。 ただし、入れ子になったクエリの順序は保持されません。

-- The following query will order the results by last name.
SELECT C1.FirstName, C1.LastName
        FROM AdventureWorksModel.Contact as C1
        ORDER BY C1.LastName
-- In the following query, ordering of the nested query is ignored.
SELECT C2.FirstName, C2.LastName
    FROM (SELECT C1.FirstName, C1.LastName
        FROM AdventureWorksModel.Contact as C1
        ORDER BY C1.LastName) as C2

こちらも参照ください