suchen

Heim  >  Fragen und Antworten  >  Hauptteil

„Die nicht aggregierten Spalten in der SELECT-Anweisung erscheinen nicht in der GROUP BY-Klausel und sind nicht kompatibel mit sql_mode=only_full_group_by.“

<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 ist nicht in der GROUP BY-Klausel und enthält die nicht aggregierte Spalte „returntr_prod.tbl_customer_pod_uploads.id“, die keine funktionale Abhängigkeit von der Spalte in der GROUP BY-Klausel hat. Dies ist konsistent mit 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;">+----+---------+---------+------- --+----------+-----------+----------------+------- --- ----+--------------+------------+--------+----- --- -------------+---------------------+ |. benutzer_id |. dateiname | +----+---------+---------+---------+----------+--- --------+----------------+-------------+--------- ------- ---+----------------+--------+-------------- -------+--- -----+ |. 1 |. 21.1212 |. 27.01.2017 | +----+---------+---------+---------+----------+--- --------+----------------+-------------+--------- ------- ---+----------------+--------+-------------- -------+--- -----+</pre> <p><br /></p>
P粉034571623P粉034571623472 Tage vor530

Antworte allen(2)Ich werde antworten

  • P粉523625080

    P粉5236250802023-08-21 10:10:51

    在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模式。

    SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
    

    或者

    (3) 不要使用SELECT *

    不要禁用ONLY_FULL_GROUP_BY模式,而是

    SELECT查询中使用相关列。相关列指的是在group by子句中出现的列或带有聚合函数(MAXMINSUMCOUNT等)的列


    重要提示

    使用点(1)或点(2)进行的更改不是永久设置,每次重新启动后都会还原。

    因此,您应该在配置文件中设置此项(例如,在[mysqld]部分的/etc/mysql/my.cnf文件中),以便在MySQL重新启动后保持更改生效:

    配置文件/etc/mysql/my.cnf

    变量名sql_mode sql-mode

    从值中删除ONLY_FULL_GROUP_BY一词并保存文件。

    注意:如果在配置文件中找不到sql_mode变量,请在文件末尾插入以下2行

    [mysqld]
    sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    

    Antwort
    0
  • P粉121081658

    P粉1210816582023-08-21 00:49:48

    这个问题可以通过在MySQL中更改sql模式来简单解决,使用以下命令:

    SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

    对我也有效...

    我使用了这个方法,因为在我的项目中有很多类似的查询,所以我只是将sql模式更改为only_full_group_by。

    或者简单地在GROUP BY子句中包含SELECT语句指定的所有列。可以保持启用sql_mode。

    谢谢... :-)


    更新日期:2023年7月14日

    更改SQL模式是一种解决方法,但是对于结构化查询语言的最佳实践是避免选择所有(SELECT * ...)列,而是在分组列上使用聚合函数,如@Tim Biegeleisen在下面的回答中提到的https://stackoverflow.com/a/41887524/3602846

    Antwort
    0
  • StornierenAntwort