sql server 2008,如何在内连接3表时摆脱重复

时间:2013-01-03 01:20:36

标签: sql-server sql-server-2008

这是我的查询。当我内部加入2个表时,没有问题。

 SELECT S.* ,
        U.Avatar ,
        U.Displayname ,
        ROW_NUMBER() OVER ( ORDER BY S.Id DESC ) rownum
 FROM   dbo.Smoothie AS S
        INNER JOIN dbo.[User] AS U ON S.UserId = U.Id
 WHERE  S.IsPublic = 1
        AND S.Status = 3
        AND S.UserId = 2

然后,我添加了另一个内连接。现在,我有很多重复。

SELECT  S.* ,
        U.Avatar ,
        U.Displayname,
        ROW_NUMBER() OVER ( ORDER BY S.Id DESC ) rownum
FROM    dbo.Smoothie AS S
        INNER JOIN dbo.[User] AS U ON S.UserId = U.Id
        INNER JOIN dbo.Favorite AS F ON U.Id = F.UserId
WHERE   S.IsPublic = 1
        AND S.Status = 3
        AND F.UserId = 2

一种解决方案是使用不同的。但是,我必须注释掉row_number,我需要row_number来进行分页。还有另一种摆脱重复的方法吗?

SELECT  DISTINCT S.* ,
        U.Avatar ,
        U.Displayname 
        -- ROW_NUMBER() OVER ( ORDER BY S.Id DESC ) rownum
FROM    dbo.Smoothie AS S
        INNER JOIN dbo.[User] AS U ON S.UserId = U.Id
        INNER JOIN dbo.Favorite AS F ON U.Id = F.UserId
WHERE   S.IsPublic = 1
        AND S.Status = 3
        AND F.UserId = 2

2 个答案:

答案 0 :(得分:3)

为什么不使用你没有row_number作为子查询的查询,然后再添加行号:

SELECT *, 
    ROW_NUMBER() OVER ( ORDER BY subQuery.Id DESC ) rownum
FROM (
SELECT  DISTINCT S.* ,
    U.Avatar ,
    U.Displayname 
FROM    dbo.Smoothie AS S
    INNER JOIN dbo.[User] AS U ON S.UserId = U.Id
    INNER JOIN dbo.Favorite AS F ON U.Id = F.UserId
WHERE   S.IsPublic = 1
    AND S.Status = 3
    AND F.UserId = 2
) AS subQuery

答案 1 :(得分:0)

Dense_Rank也可以使用您未经修改的查询来完成工作。