MySQL Left Join + Where问题

标签 mysql subquery left-join

我有一张用户表:id、type、name

和一个文章表:id、writer_id、status

其中 articles.writer_id = users.id。

我想显示一个表格,其中包含每个用户的姓名 WHERE type = 'writer' 以及与他们关联且状态 = 'assigned' 的文章数量。

到目前为止我有:

SELECT u.name, COUNT(a.id) as count 
FROM users u LEFT OUTER JOIN articles a 
ON a.writer_id = u.id 
WHERE u.type = 'writer' AND a.status = 'assigned' 
GROUP BY u.name

问题是,这不会显示与他们相关联的“已分配”状态文章为 0 的作者。我很确定我需要一个子查询,但我不确定该怎么做。提前致谢!

最佳答案

由于您使用的是 LEFT JOIN,因此请将 a.status = 'assigned' 谓词从 WHERE 子句移动到 JOIN 子句。

SELECT u.name, COUNT(a.id) as count 
FROM users u LEFT OUTER JOIN articles a 
  ON a.writer_id = u.id
  AND a.status = 'assigned' 
WHERE u.type = 'writer' 
GROUP BY u.name

说明:对于那些没有文章的用户,a.status 将为 NULL,将谓词留在 WHERE 中会破坏 LEFT 连接的目的,因为NULL = 'assigned' 的计算结果为 false。

关于MySQL Left Join + Where问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4997916/

相关文章:

MySQL:优化 JOIN 以查找不匹配的记录

mysql - 在阅读 const 表后不可能注意到

java - 如何在 JTable 中显示数据库中的数据而不附加另一个数据库中的其他数据?

sql - 请勿在分组依据中包含选择列

mysql - 转义 % 登录子查询

mysql - 按列中的值显示列中的值

mysql - 按具有两个子字符串的字段排序

mysql - PostgreSQL SERIAL 与 MySQL AUTO INCREMENT?

sql - 按定义的条件从表中选择列的次数

MySQL连接具有2个公共(public)属性的3个表