Sql server sql server 2008,如何在内部连接3个表时消除重复
这是我的问题。当我内部连接两个表时,没有问题Sql server sql server 2008,如何在内部连接3个表时消除重复,sql-server,sql-server-2008,Sql Server,Sql Server 2008,这是我的问题。当我内部连接两个表时,没有问题 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
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
一种解决方案是使用不同的方法。但是,我必须注释掉行号,我需要该行号来进行分页。有没有其他方法可以消除重复
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
为什么不使用您拥有的查询,而不将行号作为子查询,然后稍后再添加行号:
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
为什么不使用您拥有的查询,而不将行号作为子查询,然后稍后再添加行号:
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
densite\u-Rank
还将使用未修改的查询执行此任务。densite\u-Rank
还将使用未修改的查询执行此任务