连接中的MySQL COUNT查询

时间:2012-07-07 08:38:01

标签: mysql sql

我有两张桌子。

第一个表是成员表

MEMBER TABLE
ID    |  NAME
1     |  User
2     |  Another User
3     |  Some other User

,第二个表是朋友

FRIENDS TABLE
ID    |  member_id    |  Friend Name    |  Notified
1     |  1            |  Friend #1      |  0
2     |  1            |  Friend #1      |  1
3     |  2            |  Friend #1      |  0
4     |  1            |  Friend #1      |  1
5     |  2            |  Friend #1      |  1

我喜欢做的是获取会员表信息,但也要获得每个会员的通知朋友总数。

到目前为止,我所做的是

SELECT
    M.ID
    M.NAME
    COUNT(F.notified)
FROM
    MEMBER AS M
LEFT JOIN
    FRIENDS AS F
ON
    F.member_id = M.id
WHERE
    F.notified = 1
GROUP BY
    M.id

但是,这对我不起作用,因为如果我的成员没有通知朋友,则查询不会包含在结果中。

在上面的代码中,例如ID为3的成员不会包含在我的结果中。

有关如何修改该查询以便返回没有通知朋友的成员的任何想法吗?

亲切的问候 Merianos Nikos

2 个答案:

答案 0 :(得分:5)

WHERE F.notified = 1条件会取消LEFT加入,使其成为INNER加入。将条件移动到加入ON子句:

SELECT
    M.ID
    M.NAME
    COUNT(F.member_id)
FROM
      MEMBER AS M
  LEFT JOIN
      FRIENDS AS F
    ON
      F.member_id = M.id
    AND
      F.notified = 1
GROUP BY
    M.id ;

答案 1 :(得分:3)

您可以通过这种方式使用子查询来执行此操作:

SELECT
    M.ID,
    M.NAME,
    (SELECT  COUNT(F.notified) FROM FRIENDS AS F WHERE F.member_id = M.id AND F.notified = 1) AS NUMFRIENDS
FROM
    MEMBER AS M 
GROUP BY
    M.id
相关问题