我正在升级一些旧的SS2.4代码到SS4。在执行以下查询时,我会得到以下错误:
错误:
SELECT列表的表达式#1不在GROUP BY子句中,包含不依赖于GROUP BY子句中列的非聚集列't.Total'; 这与sql_mode=only_full_group_by不兼容。
如何更新此查询以与mysql严格模式兼容?编辑my.cnf mysql_mode似乎没有效果
SELECT SalesRepRegion,COUNT(DISTINCT(SalesRepID)) as Total FROM Sale s
WHERE SalesRepRegion <> 'NULL' AND YEARWEEK( SalesDate, 1 ) = ".$yearweek." AND Status <> 'Void'
GROUP BY SalesRepRegion发布于 2018-01-09 06:27:10
原来,SilverStripe 4在MysqlDatabase.php中将mysql_mode设置为ANSI。要解决这个问题,我只需将下面的内容放在我遇到问题的查询上面。这将移除only_full_group_by模式。
DB::get_conn()->setSQLMode('REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE');发布于 2018-01-10 01:01:26
您需要将选择列表中的所有项按语句添加到组中。
SELECT SalesRepRegion,COUNT(DISTINCT(SalesRepID)) as Total FROM Sale s
WHERE SalesRepRegion <> 'NULL' AND YEARWEEK( SalesDate, 1 ) = ".$yearweek." AND Status <> 'Void'
GROUP BY SalesRepRegion, Total正如其他人所提到的,这是由于MySQL 5.7.5+通过行为改变组以便符合SQL99的方式。
发布于 2021-09-11 11:16:09
可以将以下行添加到_config.php中
DB::get_conn()->setSQLMode('REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE');https://stackoverflow.com/questions/48161408
复制相似问题