MySQL Left Join + Where问题

时间:2011-02-14 22:16:34

标签: 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

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

1 个答案:

答案 0 :(得分:10)

由于您使用的是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中保留谓词会失去左边连接的目的,因为NULL = 'assigned'将评估为假的。