sql_mode=only_full_group_by



我试图帮助某人在他的代码上实现新功能;但我有这个错误

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_BYMySql

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?

因此,这个问题。因此,对于其他列,您有以下选择:

  1. 删除选择中的其他列,

  2. 对其他列使用聚合函数(如 ANY_VALUE

    (

MySQL的这种强制是为了改进语义不正确的查询,而不是简单地拥有可以以某种方式获得输出的查询。

如果您仍然想禁用该模式,则可以按照其他答案中的说明进行操作。

相关内容

  • 没有找到相关文章

最新更新