以下、私は2つのテーブル#tempと#temp2を持っています。以下の例に基づいてクロス適用と内部結合の違い
create table #temp
(
col1 int
)
insert into #temp values(6),(1),(2),(3),(null)
create table #temp2
(
col1 int
)
insert into #temp2 values(1),(2),(1),(2),(3),(null)
そしてまた、私はINNERで 以下の2つのクエリのJOINを持っている:
SELECT t1.col1,
Sum(t2.col1) AS col1
FROM #temp t1
INNER JOIN #temp2 t2
ON t1.col1 = t2.col1
GROUP BY t1.col1
結果:
:col1 col1
1 2
2 4
3 3
そして、2番目のクエリは、CROSSで
が適用されます
SELECT *
FROM #temp t1
CROSS apply (SELECT Sum(col1) AS col1
FROM #temp2 t2
WHERE t1.col1 = t2.col1) A
結果:今
col1 col1
1 2
2 4
3 3
6 NULL
、私が適用され、INNER JOINをCROSSの違いを知りたいです。私は知っているCROSS適用INNER JOINのように似ている#temp(最初のテーブル)の各レコードについては、クロス適用が実行されます。しかし、私は上記の結果セットに基づいて別の結果セットを取得しています。
ありがとうございます。
右テーブル式に対応する一致がない行については、右テーブル式の列のNULL値を参照します。 CROSS APPLYは、意味的にINNER JOINと同等です(より正確には、相関サブクエリを持つCROSS JOINのように)。暗黙的な結合条件は1 = 1です。 –
こちらをご覧ください:http://explainextended.com/2009/07/16/inner-join-vs-cross-apply/ – CM2K
CROSS APPLYは、テーブル値関数の「結合」オプションを提供するように設計されています。 2つのテーブル/ビューで作業している場合、JOINを使用して['apply']を保存する方が適切です(https://technet.microsoft.com/en-us/library/ms175156(v=sql.105) ).aspx)キーワードを使用します。これにより、将来の拡張やバグ修正のための明快さと保守性が向上します。 – DeadZone