我试图帮助某人在他的代码上实现新功能;但我有这个错误
Expression #4 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'br_interne.questionnaires_reponses.re_int' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
SELECT `ch_ref` AS id, `ch_date_prevue` AS date, `ch_prestataire_terrassement_branchement` AS prestataire, `re_int` FROM (`questionnaires_contacts`) JOIN `chantiers_osr` ON `ch_ref`=`qc_chantier_id` JOIN `communes` ON `ch_insee`=`co_insee` JOIN `departements` ON `co_departement`=`de_id` LEFT JOIN `questionnaires_reponses` ON `re_questionnaire_contact` = `qc_id` AND re_question = 7 WHERE `de_id` = '78' AND `ch_date_prevue` >= '0000-00-00' AND `qc_chantier_type` = 'osr' AND `qc_invitation_envoyee` = '1' GROUP BY `qc_chantier_id`
不幸的是,如果更改SQL_mode请求不起作用。(真的很奇怪,因为这段代码在服务器上工作(。
如果你有任何想法。即使使用SQL文档,我也可以找到修改此请求的解决方案。
提前非常感谢。
从控制台中删除ONLY_FULL_GROUP_BY
MySql
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
或
在PHPMyAdmin
查询下方触发
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
出现此错误是因为"分组依据"中的列与"选择"中的列不同。GROUP BY 将创建摘要列,因此不清楚要为 select 中的其他列选取什么值。
例如:对于具有列UserId | ModuleId
的表,其中用户 ID 和模块 ID 具有 1:N 映射。
假设你跑select UserId, ModuleId from UserModule group by userId;
现在,应该为用户 ID 选择哪个模块 Id?
因此,这个问题。因此,对于其他列,您有以下选择:
-
删除选择中的其他列,
-
对其他列使用聚合函数(如 ANY_VALUE
(
MySQL的这种强制是为了改进语义不正确的查询,而不是简单地拥有可以以某种方式获得输出的查询。
如果您仍然想禁用该模式,则可以按照其他答案中的说明进行操作。