0

最近、ストアド プロシージャに問題があり、動作が遅すぎたため、同僚の 1 人がクロス適用を提案しました。クロス適用は内部結合として機能するが、テーブル間のコマンド キーは必要ないと言いました。

私のシナリオは、私は3つのテーブルを持ってcrossarticle_articleおりcrossarticle_articletocategory、今は4であるcrossarticle_article すべてのレコードを取得したいと思っています。categoryidcategoryidcrossarticle_articletocategory

私が理解している限り、以下のクエリを作成しました:

SELECT *
FROM   crossarticle_article c
       CROSS APPLY
crossarticle_articletocategory cc1
CROSS APPLY
crossarticle_category cc2
WHERE  cc2.id = 1

このクエリはcrossarticle_article、カテゴリ ID が 1 に一致するレコードのみを返す必要がありますが、3 つのテーブルすべてからすべてのレコードを返します。

私が間違っているところ、これがクロス適用の使用方法でない場合、使用方法、およびその利点は何ですか。

クロス適用が同じテーブルで機能するということですか...もしそうなら、シナリオはどうなるでしょうか...

4

1 に答える 1

1

id がすべてのテーブルのキー フィールドであると仮定すると、クエリは次のようになります。

SELECT c.*,
       c1.colXXX,
       c2.colYYY --ALL columns  u need
FROM   crossarticle_article c
       CROSS APPLY(
    SELECT cc1.colXXX
    FROM   crossarticle_articletocategory cc1
    WHERE  cc1.id = c.id
) c1
CROSS APPLY(
    SELECT cc2.colYYY
    FROM   crossarticle_category cc2
    WHERE  cc2.id = c.id
) c2
WHERE  c.id = 4
于 2011-06-10T07:09:49.303 に答える