2012-01-30 17 views
2

我詢問here關於計算表a中的值出現在表b中的次數,但在解決此問題後,I意識到我不能使用左連接(或者右連接或外連接),因爲我要在索引視圖中使用結果,而不允許使用這些連接。SQL Server:計算表A中發生在表B中的ID不使用外連接的次數

那麼,如果這些限制適用,有什麼辦法可以做到以下幾點?

我有兩個表格:產品和訂單。訂單通過ProductID引用產品作爲外鍵。我想知道每件產品已售出多少次,包括從未售出的產品。

有沒有辦法解決這個問題,你會得到這樣的結果?

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

看起來不像是:http://blog.sqlauthority.com/2009/09/25/sql-server -outer-in-index-view-question-question-to-readers /許多來自搜索的其他結果* LEFT JOIN索引視圖*。 – Yuck 2012-01-30 17:34:20

+1

我強烈建議你將此轉移到dba.stackexchange.com – NotMe 2012-01-30 17:38:13

+1

索引視圖的每個*限制都源於以下內容:您必須能夠重新計算視圖中存儲的值, (包含在信息中的行)已經被基礎表上的操作影響的行。一旦你意識到這一點,你會意識到,不可能有任何解決方法 – 2012-01-30 17:41:24

回答

2

有沒有直接的解決方法 - 但你可以構建在訂單的索引視圖(以便聚集正在計算它,並將其存儲在索引),並有基於連接的非索引視圖產品和訂單之間。您應該仍受益於該指數。

(插入常用的注意事項重新:使用NOEXPAND,或在企業版/開發版工作)

+0

對於使用索引在查詢結果上創建表以便使用它可以使用什麼想法在全文搜索?該表可以通過使用觸發器與「訂單」和「產品」保持同步。太多的基礎設施? – Yuck 2012-01-30 17:46:15

+0

@Yuck - 編寫觸發器,並確保它們在所有情況下(包括邊緣情況)保持正確的總計,並保持所有表現良好可能是一個挑戰。正如我所說,我會純粹建立在訂單上的索引,然後依靠該索引作爲充分,但我不確定FT索引的影響。我*一般*不打算創建一個支持廉價聚合和FT索引的單一數據結構(它們看起來太不同了) – 2012-01-30 17:53:51

相關問題