2011-10-11 178 views
1

我在sql server 2008上有一個問題,我有2個表幻燈片和幻燈片。兩個表中的通用字段都是SlideShowId。 現在要用SlideCount來獲取所有的SlideShow,我使用這個過程。問題與Sql服務器

ALTER PROCEDURE [dbo].[sp_GetAllSlideShow] 
    @FILTER BIT, 
    @PORTALID INT 
AS 
BEGIN 
    IF (@FILTER = 1) 
     SELECT SS.SLIDESHOWNAME + ' [' + CAST((COUNT(S.SLIDEID)) AS VARCHAR(MAX))+']', SS.SLIDESHOWID FROM SLIDESHOW SS 
     INNER JOIN SLIDES S 
     ON SS.SLIDESHOWID = S.SLIDESHOWID 
     WHERE SS.PORTALID = 0 AND [TYPE] IS NULL 
     GROUP BY SS.SLIDESHOWNAME, SS.SLIDESHOWID 
    ELSE 
     SELECT SS.SLIDESHOWNAME + ' [' + CAST((COUNT(S.SLIDEID)) AS VARCHAR(MAX))+']', SS.SLIDESHOWID FROM SLIDESHOW SS 
     INNER JOIN SLIDES S 
     ON SS.SLIDESHOWID = S.SLIDESHOWID 
     WHERE SS.PORTALID = @PORTALID 
     GROUP BY SS.SLIDESHOWNAME, SS.SLIDESHOWID 
END 

這個運行良好,但說,如果新的幻燈片已經建立,這個過程不顯示該幻燈片,直到新的幻燈片已經在幻燈片被創建,其實那是因爲我已經加入都爲SlideCount表,並沒有特定幻燈片的幻燈片,該幻燈片不會出現,但我也想要幻燈片。該計數應該默認爲0。

有沒有什麼辦法可以做到這一點。

回答

1

這是因爲您正在使用INNER JOIN。一個INNER JOIN將只顯示在兩個表中相同的結果,因此如果您的幻燈片記錄僅添加到一個表中,那麼INNER JOIN將不會將其拖入SELECT中。嘗試將您的INNER JOIN更改爲LEFT JOIN

+0

感謝兄弟,這是超級分辨率,也很傻 – Abbas

+0

@阿巴斯沒有問題,而這些都是第二組眼睛總是有幫助的事情類型。樂意效勞。 – 2011-10-11 23:40:51