【问题标题】:SQL Join issue returning NULL valuesSQL Join 问题返回 NULL 值
【发布时间】:2013-06-17 22:50:04
【问题描述】:

我在对三个表运行查询时遇到问题:

用户、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 

如果用户已发送或接收消息,则此功能正常。但是,如果两个字段的总和为零,我会收到 NULL 的 uid、名字和姓氏。

【问题讨论】:

    标签: php mysql sql join


    【解决方案1】:

    使用LEFT JOIN user_messages m insted INNER JOIN user_messages m 当没有消息时,您收到是正常的(uid、名字和姓氏为NULL)。

    【讨论】:

      【解决方案2】:

      使用 COUNT 代替 SUM 或在传出和传入的选择中添加 IFNULL 子句。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-17
        • 2010-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-06
        相关资源
        最近更新 更多