我有3个数据表。
在条目数据表中,我有条目ID(entryId作为主键)。
我有另一个名为EntryUsersRatings的表,其中有多个条目具有entryId字段和一个评级值(从1到5)。 (对于一个entryId,评级被存储多次)。 列:ratingId(主键),entryId,rating(整数值)。
在第三个数据表中,我对第一个表中的条目进行了翻译(使用entryId,languageId和title - translation)。
我想要做的是从第一个数据表中选择所有条目及其标题(按语言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
答案 0 :(得分:0)
@CyberHawk:当您使用带有条目的左外连接时,您的结果将从左表和匹配记录中提供所有记录与右表中的连接条件。但是对于不匹配的记录,它会给你一个空值。
查看详情的以下链接:
http://msdn.microsoft.com/en-us/library/ms187518(v=sql.105).aspx