4

オペレーターAPPLYは私が使った経験のあるオペレーターではなく、特定の可能性を逃しているのではないかと心配しています。

アレクサンダークズネツォフによるこの記事は良い例を示しています

アレクサンダーの例では、彼はAPPLY関数からの戻りに参加するために使用しています- APPLYCROSSまたはOUTER私が最初に使用する必要がある他の状況はありますか?

4

3 に答える 3

2

APPLY任意の結果セットに参加できます。TOP 1いくつかの順序で行を返すことが特に便利だと思います。

select *
from T
cross apply (
 select top 1 * from T2 order by DateTime desc
) x

APPLY参加できることすべてを行うことができます。ただし、結合ヒントは使用できません。

基本的に、結合で十分な場合は結合を使用します。使用するのが少し面倒なので、もっと必要な場合はapplyを使用してください。

于 2012-09-29T13:33:04.807 に答える
2

APPLYは行ごとの演算子でAPPLYあり、前のテーブルの各行を関数またはサブクエリのいずれかにすることができます。したがって、次のような状況で非常に役立ちます。

  1. Aの各レコードからBの最新/最大/最小レコードが必要です
  2. Aの各レコードでテーブル値関数を実行する必要があります

はい、JOINに置き換えることはできますが、SQL ServerにセットベースのJOINではなく行ごとの演算子を使用するように強制しているため、通常のJOINが機能する場合はひどく実行されます。

CROSSAPPLYとOUTERAPPLYの違いは、INNERJOINとOUTERJOINの違いと同じです。基本的に、CROSS APPLYは、それが適用される関数/サブクエリが0レコードを返す場合、ソースレコードを削除します。OUTER APPLYは、ソースレコードを保持します。

続きを読む:Apply(msdn)の使用

于 2012-09-29T13:44:07.847 に答える
0

基本的に結合使用して2つの結果セットを結合しますが、CROSS APPLYはループのように動作し、外部テーブルの結果を取得してから、すべての行をパラメーターとしてドライブテーブルまたはテーブル値関数に渡して結果セットを生成します。適用には、クロス適用と外部適用の2つの形式があります。CROSS APPLY tは、ドライブテーブルまたはテーブル値関数と一致する行のみを返し、OUTER APPLYは、外部テーブルのすべてのレコードを返し、ドライブテーブルの一致は、遅いクエリが結合するため、applyの使用を避けようとします。

于 2012-09-30T16:16:57.180 に答える