2012-01-30 9 views
2

hereは、テーブルaの値がテーブルbに発生する回数をカウントすることについて尋ねましたが、左側の結合(または右側または外側)を使用できないことを認識しました。なぜなら、これらの結合を使用できないインデックス付きのビューで結果を使用するためです。SQL Server:テーブルAのIDが外部結合を使用せずにテーブルBで発生する回数をカウントする

これらの制限が適用される場合は、次のような方法がありますか?

商品と注文の2つのテーブルがあります。注文は、外部キーとしてProductID経由で商品を参照します。私は、決して販売されていない製品を含め、各製品が何回販売されたか知りたい。

これを解決する方法はありますか?このようなことで終わるでしょうか?

Product | Times sold 
Milk | 5 
Bread | 18 
Cheese | 0 
+0

それのようには見えません。http://blog.sqlauthority.com/2009/09/25/sql-server - 外出先 - 質問 - 読者 - 他の多くの検索結果* LEFT JOIN索引付きビュー*。 – Yuck

+1

これをdba.stackexchange.comに移動することを強くお勧めします。 – NotMe

+1

インデックス付きビューのすべての*制限は、次のものに起因します。ビューに格納された値を*基礎となる表に対する操作の影響を受けた行(情報が含まれています)に格納されます。これを理解すると、回避策がない可能性が高いことに気づくでしょう。 –

答えて

2

そこには直接の回避策はません - しかし、(凝集体がそれに基づいて計算し、インデックスに格納されているように)あなたが注文にインデックス付きビューを構築することができ、そして参加に基づく非インデックス付きビューを持っています商品と注文の間にあなたはでなければなりません。は依然としてインデックスの恩恵を受けるべきです。

(挿入、通常の警告が再:NOEXPANDを使用して、またはEnterprise /デベロッパー版に取り組んで)

+0

インデックスを使用してクエリの結果にテーブルを作成し、全文検索で?表は、トリガを使用して「注文」および「製品」と同期して維持することができます。インフラが多すぎますか? – Yuck

+0

@Yuck - トリガーを作成し、すべてのケース(エッジケースを含む)で正しい合計を維持し、すべてのパフォーマンスを良好に保つことが挑戦になる可能性があります。私が言うように、私はOrdersで純粋にインデックスを構築し、そのインデックスを十分に利用していますが、FTインデックスの意味合いについてはわかりません。私は一般的に、安価な集約とFT索引付けをサポートする単一のデータ構造を作成しようとは考えていません(彼らはあまりにも異なるようです) –

関連する問題