当count(*)= 0时,MySQL返回行

时间:2014-06-16 10:27:34

标签: mysql

我有两张桌子:

用户

userId, user
------------
0, Alice
1, Bob
2, Eve

rss

userId, link, read
------------
0, example.com/1, 0
0, example.com/2, 1
0, example.com/3, 1
0, example.com/4, 0
1, example.com/3, 0
1, example.com/4, 1

当我跑步时:

SELECT `users`.`user`, COUNT(*) FROM `rss` INNER JOIN `users` ON `rss`.`userId`=`users`.`userId` WHERE `rss`.`read`=0 GROUP BY `rss`.`userId`

我明白了:

Alice, 2
Bob, 1

但我想让夏娃提到(说明0),即

Alice, 2
Bob, 1
Eve, 0

1 个答案:

答案 0 :(得分:3)

您需要外部联接:

SELECT u.`user`, COUNT(rss.userId)
FROM users u LEFT JOIN
     rss
     ON rss.userId = u.userId AND rss.`read` = 0
GROUP BY u.userId;

而且,我做了以下更改:

  • users添加别名,以便查询更易于阅读和编写。
  • 切换表格,以便我可以使用left join代替right join。我认为left join更容易阅读。
  • 更改了group by以使用users表中的字段。
  • rss上的条件移至on子句。
  • 删除了大部分后蜱。他们只是弄乱了查询。