关于一个数据库sql语句的问题,我想显示出所有记录,但是数据库会把为空的数据剔除。

这是我的sql语句:select user.id,user.mobile, user.name, sum(actionType=1) 键盘,sum(actionType in(2,3,4)) app,sum(actionType in(1,2,3,4)) 合计 from user LEFT JOIN userecord on user.id=userecord.userId where userecord.actionTime between '2016-12-01 00:00:00' and '2016-12-01 23:59:59' and userecord.userId between 226 and 244 group by user.id; 我的原意是统计出266到244之间所有用户的操作记录,但是有些用户在这个时间段没有操作,所以查询结果就没有显示出来,下面是结果。
图片说明

7个回答

你就查找两个表的所有id相同的数据不可以嘛?

不知道你所谓的空数据是啥东西,你还是仔细查查你的where条件是不是不完善

liuyuan19931217
晚灯下的烟火 而不是没记录的直接不显示
3 年多之前 回复
liuyuan19931217
晚灯下的烟火 像224,228等用户在12月1日没有操作记录,我想要没有记录的也显示0
3 年多之前 回复

这是用户228在同条件查询的
图片说明

你是啥数据库 如果是oracle 你可以利用decode(user.name,'',0,user.name) 每个字段都这样查 表示如果user.name为空 则显示0 如果不为空则显示user.name的值

u012934325
小李学习笔记和踩坑总结 回复晚灯下的烟火: 没有看懂 如果是oracle的 按照我这个应该可以解决你的问题 就是无值显示0,有值就显示值
3 年多之前 回复
liuyuan19931217
晚灯下的烟火 只能最后三列显示0,我前面三列要显示正确数据,假设查出数据为null也要显示成这样---228,132xxxxxxxx,张三,0,0,0
3 年多之前 回复

糟糕的提问代码。。。。。。。。。。。

把时间过滤条件改做连接条件,userId过滤条件改用user表字段。

        select user.id,user.mobile,
               user.name,
               sum(actionType=1) 键盘,
               sum(actionType in(2,3,4)) app,
               sum(actionType in(1,2,3,4)) 合计
          from user
     LEFT JOIN userecord
            on user.id=userecord.userId
           and userecord.actionTime between '2016-12-01 00:00:00' and '2016-12-01 23:59:59'
         where user.userId between 226 and 244
      group by user.id;

你的join条件有点问题

select user.id,user.mobile, user.name, sum(actionType=1) 键盘,sum(actionType in(2,3,4)) app,sum(actionType in(1,2,3,4)) 合计 from user LEFT JOIN userecord on user.id=userecord.userId and userecord.actionTime between '2016-12-01 00:00:00' and '2016-12-01 23:59:59' where userecord.userId between 226 and 244 group by user.id; 

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问