我有两张桌子。
第一个表是成员表
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
答案 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