首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL与count和where连接

问MySQL与count和where连接
EN

Stack Overflow用户
提问于 2016-06-21 17:15:44
回答 1查看 38关注 0票数 0

我想获取所有讨论,并添加所有UserDiscussion行的计数,在这些行中,“书签”列对于讨论是正确的。

代码语言:javascript
复制
Table: Discussion
-----------------
DiscussionID
Name
.....


Table: UserDiscussion
---------------------
UserID
DiscussionID
Bookmarked (Boolean)

这是我的查询,但不正确:

代码语言:javascript
复制
SELECT d.*, COUNT(*) as BookmarkCount
FROM Discussion d
LEFT JOIN UserDiscussion ud
ON ud.DiscussionID = d.DiscussionID
WHERE ud.Bookmarked = true;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-21 17:16:48

写这篇文章的正确方法是:

代码语言:javascript
复制
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兼容)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37950680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档