如何避免在加入后获得多个重复的行

时间:2013-02-27 16:44:26

标签: join duplicates

好的,所以我有4张桌子:

credits, playlog, sessionlog, user

creditsuseriduser加入 playlogsessionlogid加入sessionlog sessionloguserid加入user

因此,当我加入sessionlog的任何内容时,我必须做多次才能获取用户。

我想我知道为什么会这样,我只是不知道如何防止它。

因此,每当玩家玩一个级别时,都会创建一个playlog(并且每个playlog包含sessionlogid)。

当我把所有东西加在一起时,每个玩家都会像playlog那样经常被列出,尽管我只希望他被列入一次。

当我查看来自特定玩家的积分时,我会获得2行,例如,这取决于他花了多少学分。

但是一旦我加入sessionlog,这两行就会成倍增加似乎有多少playlog属于那个sessionlog - 如果他玩了5级,这两个付款行乘以5,输出为10行,每次付款。 这给了我很大的问题来计算每个级别的付款。

如何进行仅从playlog加上sessionlog加上其他约束的最新{{1}}的查询?

1 个答案:

答案 0 :(得分:0)

您没有提供足够的信息。这是一次尝试:这将为您提供每个玩家花费的用户列表和多少学分:

SELECT      dbo.Users.userID
            , dbo.Users.userName
            , SUM(dbo.Credit.CreditChange) AS NetCreditSpent
            , COUNT(dbo.PlayLog.sessionlogid) AS PlayCount
            , 1.0 * SUM(dbo.Credit.CreditChange) / COUNT(dbo.PlayLog.sessionlogid) AS CreditSpentPerPlay
FROM        dbo.Credit
                RIGHT OUTER JOIN dbo.PlayLog
                INNER JOIN dbo.SessionLog
                    ON dbo.PlayLog.sessionlogid = dbo.SessionLog.sessionlogid
                RIGHT OUTER JOIN dbo.Users
                    ON dbo.SessionLog.userid = dbo.Users.userID 
                    ON dbo.Credit.userID = dbo.Users.userID
GROUP BY    dbo.Users.userID, dbo.Users.userName