今天进行sql查询时,碰到了一个问题:
SQL语句:
select r.user_id, r.job_id, sum(t.money) as job_salary
from pj_punch_records as r left join pj_punch_transactions as t on r.job_id= t.transaction_detail
where r.user_id = 1 and t.type = 1
order by r.created_at desc
1.进行2表关联查询,同时,使用 sum() 来统计金钱总数,主表,并没有对应查询条件的记录,居然出现了一条全部为 NULL 的记录。这个不合理啊!我想要的自然是,没有查询到合适的数据,结果集应该为空!
2.上面这种情况,当有记录时,就正常了!
解决方法:
也是胡乱测试了下,发现添加上 ‘group by r.job_id‘ 后,发现结果集就为空了!
没研究过mysql,也没时间好好看看mysql方面的知识。但通过以上的2种情况,猜测:
select - 作为mysql的输出方法,类似php中的echo等
碰到 sum() avg() 等mysql的内置函数,或其他非当前、查询的数据表的直接字段(要么是其他语句、要么是把数据表的字段做了什么处理!),都会输出一行数据!
所以,才有了我们看到的一行全部为NULL的数据!
而使用 group by r.job