2014-09-10 58 views
0

我想獲得一個有效的方式做下面的存儲過程。此過程將顯示屬於所有類別市場中企業的汽車數量。有效的SQL存儲過程與連接和不同

我有類別表是主要選擇,然後我進入汽車表來計算汽車並在類別內加入他們的業務,這裏是真正效率低下的地方我然後檢查選定的市場/地點或沒有選擇所有市場。這裏是。

Create PROC [USP_CAT] 
    @MKT int 

AS 

BEGIN 

    SELECT *, 
     (
     SELECT COUNT(CAR_ID) 
     FROM CARS 
     INNER JOIN BUSINESS ON CAR_BIZ=BIZ_ID 
     JOIN BIZCATS ON BC_BIZ = BIZ_ID AND BC_CAT = CAT_ID 
     WHERE BIZ_APPROVED = 1 AND BIZ_EXPIRES >= getDate() AND 
     (
      SELECT COUNT(BLOC_MKT) 
      FROM BIZLOCS 
      WHERE BIZ_ID = BLOC_BIZ AND (BLOC_MKT = @MKT OR @MKT = -1) 
     )>0 
    ) AS CAT_CAR_COUNT 
    FROM CATS 
    WHERE CAT_HIDE = 0 
    ORDER BY CAT_ORDER asc 

END 

任何建議來整理這是非常讚賞。

+2

如果您發佈了DDL,一些示例插入以及您期望的結果,您將獲得更好的結果。 – granadaCoder 2014-09-10 12:58:02

回答

0

我認爲一個EXISTS(http://msdn.microsoft.com/en-us/library/ms188336.aspx)可能會有所幫助。

Create PROC [USP_CAT] 
    @MKT int 

AS 

BEGIN 

    SELECT *, 
     (
     SELECT COUNT(CAR_ID) 
     FROM CARS 
     INNER JOIN BUSINESS ON CAR_BIZ=BIZ_ID 
     JOIN BIZCATS ON BC_BIZ = BIZ_ID AND BC_CAT = CAT_ID 
     WHERE BIZ_APPROVED = 1 AND BIZ_EXPIRES >= getDate() AND EXISTS 
     (
      SELECT BLOC_MKT 
      FROM BIZLOCS 
      WHERE BIZ_ID = BLOC_BIZ AND (BLOC_MKT = @MKT OR @MKT = -1) 
     ) 
    ) AS CAT_CAR_COUNT 
    FROM CATS 
    WHERE CAT_HIDE = 0 
    ORDER BY CAT_ORDER asc 

END 
+0

謝謝德魯,這確實是一個改進;我會和它一起去的。 只是一個側面說明,這不是整個項目的重要組成部分,所以如果它影響我們完成後的性能,我會選擇一個不計數的選項,只顯示類別。 – user3010431 2014-09-10 17:12:04