2

我有 3 个数据表。

在条目数据表中,我有带有 ID 的条目(entryId 作为主键)。

我有另一个名为 EntryUsersRatings 的表,其中有多个条目具有 entryId 字段和评级值(从 1 到 5)。(评级为一个 entryId 存储多次)。列:ratingId(主键)、entryId、rating(整数值)。

在第三个数据表中,我有第一个表中条目的翻译(带有 entryId、languageId 和 title - 翻译)。

我想做的是从第一个数据表中选择所有条目及其标题(按语言 ID)。最重要的是,我想要存储在 EntryUsersRatings 中的每个条目的平均评分(可以存储多次)。

我试过这个:

SELECT entries.entryId, EntryTranslations.title, AVG(EntryUsersRatings.rating) AS AverageRating
FROM entries 
    LEFT OUTER JOIN
        EntryTranslations ON entries.entryId = EntryTranslations.entryId AND EntryTranslations.languageId = 1
    LEFT OUTER JOIN
        EntryUsersRatings ON entries.entryId = EntryUsersRatings.entryId
      WHERE entries.isDraft=0
    GROUP BY title, entries.entryId

isDraft 只是意味着条目没有存储所需的所有信息(只是不完整的数据 - 与我们的案例无关)。

任何帮助将不胜感激。

编辑:我的解决方案给了我评级的空值。Edit1:这个查询工作得很好,我正在寻找错误的数据库。我们还找到了另一个解决方案,它给了我们相同的结果(我希望有人会觉得这很有用):

    SELECT entries.entryId, COALESCE(x.EntryUsersRatings, 0) as averageRating
    FROM entries  
    LEFT JOIN(
    SELECT rr.entryId, AVG(rating) AS entryRating 
    FROM EntryUsersRatings  rr 
    GROUP BY rr.entryId) x ON x.entryId = entries.entryId 
4

1 回答 1

0

@Cyber​​Hawk:当您使用带有条目的左外连接时,您的结果将提供左表中的所有记录以及与右表中的连接条件匹配的记录。但对于不匹配的记录,它会给你一个空值。

查看以下链接以获取详细信息:

http://msdn.microsoft.com/en-us/library/ms187518(v=sql.105).aspx

于 2012-10-23T08:48:36.430 回答