Die Spalten in der SELECT-Anweisung befinden sich nicht in der GROUP BY-Klausel und enthalten nicht aggregierte Spalten....Inkompatibel mit sql_mode=only_full_group_by
P粉521748211
2023-08-21 13:21:31
<p>Ich verwende MySQL 5.7.13 mit WAMP-Server auf meinem Windows-PC</p>
<p>Mein Problem ist, dass ich beim Ausführen dieser Abfrage</p>
<pre class="brush:php;toolbar:false;">SELECT *
VON „tbl_customer_pod_uploads“.
WHERE `load_id` = '78' AND
`status` = 'Aktiv'
GROUP BY `proof_type`</pre>
<p>Ich bekomme immer diese Fehlermeldung</p>
<blockquote>
<p>Ausdruck Nr. 1 in der SELECT-Liste befindet sich nicht in der GROUP BY-Klausel und enthält die nicht aggregierte Spalte „returntr_prod.tbl_customer_pod_uploads.id“, die keine funktionalen Abhängigkeiten von den Spalten in der GROUP BY-Klausel aufweist sql_mode = only_full_group_by ist nicht kompatibel</p>
</blockquote>
<p>Bitte teilen Sie mir die beste Lösung mit. </p>
<p>Die Ergebnisse, die ich benötige, sind wie folgt</p>
<pre class="brush:php;toolbar:false;">+----+---------+---------+------- --+----------+-----------+----------------+------- --- ----+--------------+------------+--------+----- --- -------------+---------------------+
|. benutzername |. dateiname |
+----+---------+---------+---------+----------+--- --------+----------------+-------------+--------- ------- ---+----------------+--------+-------------- -------+--- -----+
|. 1 |. 21.1212 |. 27.01.2017 |
+----+---------+---------+---------+----------+--- --------+----------------+-------------+--------- ------- ---+----------------+--------+-------------- -------+--- -----+</pre>
<p><br /></p>
在MySql引擎中有一个系统变量
ONLY_FULL_GROUP_BY
。从Mysql版本5.7.5开始:默认情况下启用
ONLY_FULL_GROUP_BY
SQL模式。在5.7.5版本之前:默认情况下未启用
ONLY_FULL_GROUP_BY
。如果启用了
ONLY_FULL_GROUP_BY
SQL模式(从版本5.7.5开始默认启用),MySQL将拒绝查询选择列表、HAVING
条件或ORDER BY
列表引用非聚合列,这些列既不在GROUP BY
子句中命名,也不依赖于它们。要解决此问题,请使用以下三个解决方案之一
(1) PHPMyAdmin
禁用:
ONLY_FULL_GROUP_BY
模式如果您使用的是phpMyAdmin,请根据下面的截图更改
sql_mode
设置。编辑
sql mode
变量并从值中删除ONLY_FULL_GROUP_BY
文本或者
(2) SQL/命令提示符
通过运行以下命令禁用:
ONLY_FULL_GROUP_BY
模式。或者
(3) 不要使用
SELECT *
不要禁用
ONLY_FULL_GROUP_BY
模式,而是在
SELECT
查询中使用相关列。相关列指的是在group by
子句中出现的列或带有聚合函数(MAX
、MIN
、SUM
、COUNT
等)的列重要说明
使用
point(1)或point(2)
进行的更改不会永久设置,每次重新启动后都会恢复。因此,您应该在配置文件中设置此项(例如,在
[mysqld]
部分的/etc/mysql/my.cnf
中),以便在MySQL重新启动后更改仍然生效:配置文件:
/etc/mysql/my.cnf
变量名:
sql_mode
或者sql-mode
从值中删除单词
ONLY_FULL_GROUP_BY
并保存文件。注意:如果在配置文件中找不到
sql_mode
变量,请在文件末尾插入以下2行This
将通过在MySQL中更改SQL模式来简单解决此问题,使用以下命令:
对我来说也有效... 我使用了这个,因为在我的项目中有很多类似的查询,所以我只是将这个SQL模式更改为only_full_group_by
或者简单地在GROUP BY子句中包含SELECT语句指定的所有列。sql_mode可以保持启用状态。
谢谢... :-)
更新日期:2023年7月14日
更改SQL模式是一种解决方法,但是对于结构化查询语言的最佳实践将是避免选择所有(SELECT * ...)列,而是在分组列上使用聚合函数,如@Tim Biegeleisen在下面的答案中提到的https://stackoverflow.com/a/41887524/3602846