join中的MySQL计数查询

join中的MySQL计数查询,mysql,sql,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 |

我有两张桌子

第一个表是成员表

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

其中F.notified=1条件取消左连接,使其作为内部连接工作。将条件移动到连接ON条款:

其中F.notified=1条件取消左连接,使其作为内部连接工作。将条件移动到连接ON条款:


可以通过以下方式使用子查询执行此操作:

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

可以通过以下方式使用子查询执行此操作:

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

美好的但使用这种方法,您甚至不需要GROUP BY M.id。这将为members表中的每个记录运行一个单独的子查询,这可能会随着members表的增长迅速影响性能。Ypercube的答案是更好的方法,因为它不会有这些问题。很好。但使用这种方法,您甚至不需要GROUP BY M.id。这将为members表中的每个记录运行一个单独的子查询,这可能会随着members表的增长迅速影响性能。Ypercube的答案是更好的方法,因为它不会有这些问题。