作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一张用户表: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/
我是一名优秀的程序员,十分优秀!