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的答案是更好的方法,因为它不会有这些问题。