You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal 8:SQLSTATE[42000]:1055错误原因咨询(附查询语句)

解决Drupal 8中SQLSTATE[42000]: 1055错误的原因与修复方案

这个错误我太熟了——它的根源是MySQL的ONLY_FULL_GROUP_BY SQL模式在起作用,这是MySQL 5.7及以上版本默认开启的严格模式,核心要求是:SELECT子句里的所有非聚合列,要么必须出现在GROUP BY子句中,要么得用聚合函数(比如MAX()、MIN()、GROUP_CONCAT())包裹。

咱们看你的查询语句:

$result = $db->query('SELECT CODE, ID, ORIGINAL_TITLE , DESCRIPTION_EN FROM {mapCSV_data} WHERE csv_data_status = 1 GROUP BY CODE ORDER BY CODE');

你用GROUP BY CODE来分组,但SELECT里的ID、ORIGINAL_TITLE、DESCRIPTION_EN这几个列既不在GROUP BY里,也没有被聚合函数处理。MySQL会认为这种查询逻辑不明确:同一CODE可能对应多条记录,它不知道该取哪一条的ID、标题或描述返回给你,所以直接抛出1055错误。

给你几个靠谱的修复方案,按需选择:

  • 方案1:把所有非聚合列加入GROUP BY(适合同一CODE对应唯一记录的场景)
    如果每个CODE对应的ID、标题、描述都是唯一的(也就是符合csv_data_status = 1条件的记录里,一个CODE只对应一条数据),直接把这些列都加到GROUP BY里就行:

    $result = $db->query('SELECT CODE, ID, ORIGINAL_TITLE, DESCRIPTION_EN FROM {mapCSV_data} WHERE csv_data_status = 1 GROUP BY CODE, ID, ORIGINAL_TITLE, DESCRIPTION_EN ORDER BY CODE');
    
  • 方案2:用聚合函数明确取数逻辑(适合同一CODE对应多条记录的场景)
    如果同一CODE有多条符合条件的记录,你得明确告诉MySQL要取哪一条的字段值。比如取ID最大的那条记录的标题和描述:

    $result = $db->query('SELECT CODE, MAX(ID) AS ID, ORIGINAL_TITLE, DESCRIPTION_EN FROM {mapCSV_data} WHERE csv_data_status = 1 GROUP BY CODE, ORIGINAL_TITLE, DESCRIPTION_EN ORDER BY CODE');
    

    或者如果只需要去重后的CODE关联数据,也可以用DISTINCT替代GROUP BY(逻辑允许的话):

    $result = $db->query('SELECT DISTINCT CODE, ID, ORIGINAL_TITLE, DESCRIPTION_EN FROM {mapCSV_data} WHERE csv_data_status = 1 ORDER BY CODE');
    
  • 方案3:临时关闭ONLY_FULL_GROUP_BY模式(不推荐,仅应急用)
    如果你实在不想调整查询逻辑(不建议这么做,因为违背SQL标准,后续可能出问题),可以临时关闭当前数据库连接的严格模式:

    // 先关闭ONLY_FULL_GROUP_BY
    $db->query("SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))");
    // 再执行你的查询
    $result = $db->query('SELECT CODE, ID, ORIGINAL_TITLE , DESCRIPTION_EN FROM {mapCSV_data} WHERE csv_data_status = 1 GROUP BY CODE ORDER BY CODE');
    

优先推荐前两种方案,遵循SQL标准的写法不仅更健壮,也能避免后续数据库版本升级带来的兼容性问题。

内容的提问来源于stack exchange,提问作者Deepak goud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:07:16