【问题标题】:Issue with Sql ServerSql Server 的问题
【发布时间】:2011-10-11 23:20:25
【问题描述】:

我在 sql server 2008 上有一个问题,我有 2 个表格 SlideShow 和 Slide。两个表中的共同字段是 SlideShowId。 现在要使用 SlideCount 获取所有 SlideShow,我使用此过程。

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。

有什么办法可以做到。

【问题讨论】:

    标签: tsql sql-server-2008 stored-procedures inner-join


    【解决方案1】:

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

    【讨论】:

    • @Abbas 没问题,这些都是第二双眼睛总是有帮助的类型。很高兴能提供帮助。
    猜你喜欢
    • 2011-04-05
    • 1970-01-01
    • 2014-09-08
    • 2020-10-02
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多