mysql5.7group by异常引发的思考

来源:互联网 发布:java防止页面脚本注入 编辑:程序博客网 时间:2022/10/05 06:23

今天有一个场景,在条件查询后需要group by去重,但是放到环境下跑的时候,mysql5.7报错,报错如下:

ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause … this is incompatible with sql_mode=only_full_group_by [duplicate],但是是公司数据库环境不能随便动它,于是只能另想它法。

发现left join有异曲同工之妙。表结构如下:



我要查出姓名相同,但是年龄是最大的那些记录,按理说应该查出:如下 

张三 25

李四 22

王五 55

于是有如下思考,在姓名相同的情况下

找出u1表中年龄比u2表年龄小的两张表组合起来,发现年龄较小的记录都有id1,name1,age1,也就是能匹配右表的记录,年龄大的匹配不到,这样就很清楚了,再加上一个where 语句即可查出年龄大的记录,如下

SELECT * from user u1 LEFT JOIN user u2 ON(u1.name = u2.name and u1.age < u2.age) where u2.id is null

这样可以查出: