0

これが私の質問です。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

1つの解決策は、個別に使用することです。ただし、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
4

2 に答える 2

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
于 2013-01-03T01:25:55.267 に答える
0

Dense_Rankそれ以外の場合は変更されていないクエリでも機能します。

于 2013-01-03T07:01:59.140 に答える