MySQL Left Join + Where问题

Cha*_*les 4 mysql subquery left-join

我有一个用户表:id,type,name

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

articles.writer_id = users.id.

我想显示每个用户名称WHERE type ='writer'的表格,以及与status ='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
Run Code Online (Sandbox Code Playgroud)

问题是,这不会显示具有与之关联的0"已分配"状态文章的作者.我很确定我需要一个子查询,但我不知道该怎么做.提前致谢!

The*_*ter 10

由于您使用的是a 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
Run Code Online (Sandbox Code Playgroud)

解释:对于那些没有文章的用户,a.statusNULLWHERE中的谓词保留为LEFT连接的目的,因为NULL = 'assigned'将评估为false.