我在三个表上运行查询时遇到问题:
users,user_teams,user_messages
我希望创建一个报告,其中直线经理可以查看其团队所有成员的传入邮件和传出邮件的总数。如果没有传出或传入,则查询将显示用户的零值。
我的表格如下:
users
------
uid
forename
surname
user_teams
-------------
id
manager_id
member_id
user_messages
-------------
id
outgoing
incoming
uid
msg_date
manager_id和member_id都与用户的uid字段相关。管理者和用户之间存在一对多的关系。
到目前为止,我的查询是:
SELECT u.uid, u.forename, u.surname,
SUM(IF(m.outgoing=0 ,1,0)) AS total_outgoing,
SUM(IF(m.incoming>0 ,1,0)) AS total_incoming,
FROM users u
INNER JOIN user_messages m
ON m.uid=u.uid AND m.msg_date>='2012-09-01' AND m.msg_date<='2013-08-31'
RIGHT JOIN user_teams ut ON ut.member_id=u.uid
WHERE ut.leader_id=?
GROUP BY u.uid
ORDER BY u.surname ASC
如果用户发送或接收了消息,则此功能正常。但是,如果两个字段的SUM都为零,我会收到uid,forename和surname的NULL。
答案 0 :(得分:4)
使用LEFT JOIN user_messages m
代替INNER JOIN user_messages m
当没有正常的消息时(uid,forename和surname为NULL)。
答案 1 :(得分:0)
使用COUNT而不是SUM或在传出和传入时选择一个IFNULL子句。