mysql报错Expression #3 of SELECT list is not in GROUP BY cla
今天sql一对多关联查询发现一个错误,提示说查询的字段不在group by的子句中,因为sql_mode是only_full_group_by。 报错信息: #1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'xt_sc.t_comment.content' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by ? 执行的sql语句 ? SELECT n.id,n.title,n.qq,u.username,c.content,c.create_time FROM `t_need` AS `n` LEFT JOIN `t_users` `u` ON `n`.`user_id`=`u`.`id` INNER JOIN ( SELECT max(id) as id,n_id,content,create_time FROM `t_comment` GROUP BY `n_id` ) AS `c` ON `n`.`id``c`.`n_id` WHERE `n`.`status` = 2 AND `n`.`form` 1 BY `n`.`id` ORDER BY `stick` DESC,`n`.`update_time` DESC LIMIT 0,30 ? 问题出现的原因: 查看mysql本地的sql_mode命令: ? select @@sql_mode; show variables like 'sql_mode'; ? 输出sql_mode的值:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZER 确实第一个是only_full_group_by,这个模式说明对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么将认为这个SQL是不合法的,因为列不在GROUP BY从句中。就是说不允许select的列没有出现在group by的子句中。 在5.7.5以上,sql的默认模式配置是ONLY_FULL_GROUP_BY。
然后再执行查询语句,可以正常查询出结果 解决办法2: 优化sql语句 ? JOIN ( SELECT a.id,a.n_id,a.content,a.create_time `a` ( `n_id` ) AS `b` ON `b`.`n_id``a`.`n_id` WHERE `a`.`id` `b`.`id` ) ON `n`.`id` `c`.`n_id` 30 ? 执行以上查询语句,可以正常查询出结果。 ? done! ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |