我有一个用户表: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“已分配”状态文章的作者。我很确定我需要一个子查询,但我不知道该怎么做。提前谢谢!
答案 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'
将评估为假的。