表数据如下:
执行SQL语句1:
SELECT * FROM `z_course` GROUP BY NAME,SEX
结果:
执行SQL语句2:
SELECT * FROM `z_course` GROUP BY NAME
sql 1 根据 name,sex 两个字段分组,查询 所有字段,返回结果
sql 2 根据 name 字段分组,查询所有字段,返回结果
sql2 和 sql1 的区别是 分组少了 sex字段,那么 返回的结果 就是只有 name分组结果 并且 返回分组后的第一条记录
select 字段 和 group by 字段 不一致,没有报错?这是为什么?
数据库版本用的 5.6.24,难道和版本有关? 换了个 5.7的也是不行。
show variables like 'sql_mode'
set session sql_mode= 'ONLY_FULL_GROUP_BY,NO_ENGINE_SUBSTITUTION';
SELECT * FROM `z_course` GROUP BY NAME
一顿操作,复现了 select 字段 和 group by 字段 不一致 导致sql报错的问题。所以,问题是 sql_mode 的设置。
对于sql_mode,就不赘述了,他有一个选项,
ONLY_FULL_GROUP_BY,限制了 group by 字段 和 select 字段一致的要求。
如果 select 的字段 使用了 聚合函数,那肯定是没问题的。