问题与Sql服务器

问题描述:

我在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。

有没有什么办法可以做到这一点。

这是因为您正在使用INNER JOIN。一个INNER JOIN将只显示在两个表中相同的结果,因此如果您的幻灯片记录仅添加到一个表中,那么INNER JOIN将不会将其拖入SELECT中。尝试将您的INNER JOIN更改为LEFT JOIN

+0

感谢兄弟,这是超级分辨率,也很傻 – Abbas

+0

@阿巴斯没有问题,而这些都是第二组眼睛总是有帮助的事情类型。乐意效劳。 – 2011-10-11 23:40:51