今天写sql发生了空指针异常,后来查询发现自己在group by结果里进行了统计导致错误 在这里说下产生原因 这个原因是sql的解析树决定的,count发生在select是在group by 之后执行的由于group by产生的临时表不存在所以统计出的结果是null 而不是 0;因为null在内存里没有索引是没有办法被搜索到的。
举个最简单的栗子:
SELECT
count(*)
FROM
auth_user_role aur
INNER JOIN auth_role ar ON aur.role_uid = ar.id
WHERE
aur.user_id = 66666
AND role_name != '查询'
GROUP BY
ar.id
在不匹配的情况下这个的结果就是null 而且需要注意一点,在该种情况下无法使用 IFNULL(COUNT(*),0)函数;
而下面的是0
SELECT
count(*)
FROM
auth_user_role aur
INNER JOIN auth_role ar ON aur.role_uid = ar.id
WHERE
aur.user_id = 66666
AND role_name != '查询'