我想获取所有讨论,并添加所有UserDiscussion行的计数,在这些行中,“书签”列对于讨论是正确的。
Table: Discussion
-----------------
DiscussionID
Name
.....
Table: UserDiscussion
---------------------
UserID
DiscussionID
Bookmarked (Boolean)这是我的查询,但不正确:
SELECT d.*, COUNT(*) as BookmarkCount
FROM Discussion d
LEFT JOIN UserDiscussion ud
ON ud.DiscussionID = d.DiscussionID
WHERE ud.Bookmarked = true;发布于 2016-06-21 17:16:48
写这篇文章的正确方法是:
SELECT d.*, COUNT(ud.DiscussionID) as BookmarkCount
FROM Discussion d LEFT JOIN
UserDiscussion ud
ON ud.DiscussionID = d.DiscussionID AND
ud.Bookmarked = true
GROUP BY d.DiscussionId;这些变化是:
COUNT()。这将计算匹配的数量。COUNT(*)永远不会返回0,在这种情况下(组将被过滤掉)。WHERE条件移到ON子句。否则,WHERE条件将筛选出NULL值,将LEFT JOIN转换为内部联接。GROUP BY子句,这样您就可以在每个讨论id中得到一行。注意:假设DiscussionId是Discussion的主键,按Discussion分组是可以的。通常,最好将SELECT中的所有未聚合列都包含在GROUP BY中。但是,当GROUP BY是由主键/唯一键时,它是可以的(并且与ANSI兼容)。
https://stackoverflow.com/questions/37950680
复制相似问题