Les colonnes de l'instruction SELECT ne sont pas dans la clause GROUP BY et contiennent des colonnes non agrégées....Incompatible avec sql_mode=only_full_group_by
P粉521748211
P粉521748211 2023-08-21 13:21:31
0
2
622
<p>J'utilise MySQL 5.7.13 avec le serveur WAMP sur mon PC Windows</p> <p>Mon problème est lors de l'exécution de cette requête</p> <pre class="brush:php;toolbar:false;">SELECT * DE `tbl_customer_pod_uploads` OÙ `load_id` = '78' ET `statut` = 'Actif' GROUPER PAR `proof_type`</pre> <p>J'obtiens toujours cette erreur</p> <blockquote> <p>L'expression n°1 dans la liste SELECT n'est pas dans la clause GROUP BY et contient la colonne non agrégée 'returntr_prod.tbl_customer_pod_uploads.id' qui n'a aucune dépendance fonctionnelle sur les colonnes de la clause GROUP BY, ce qui est cohérent avec ; sql_mode = only_full_group_by n'est pas compatible</p> </blockquote> <p>Veuillez m'indiquer la meilleure solution. </p> <p>Les résultats dont j'ai besoin sont les suivants</p> <pre class="brush:php;toolbar:false;">+----+--------------+---------+------- ---+--------------+-----------+----------------+------- --- ----+--------------+------------+--------+--------- --- -------------+-----------+ | identifiant_utilisateur | ID_chargement | latitude | type_document | nom_fichier | +----+---------+---------+---------+----------+--- --------+----------------+--------------+-------------- ------- --+----------------+--------+-------------- -------+--- -----+ | 1 | 1 | 78 | 21.1212 | 21.5454 | id_Card.docx 0 | +----+---------+---------+---------+----------+--- --------+----------------+--------------+-------------- ------- --+----------------+--------+-------------- -------+--- ----+</pré> <p><br /></p>
P粉521748211
P粉521748211

répondre à tous(2)
P粉300541798

Il existe une variable système ONLY_FULL_GROUP_BY dans le moteur MySql.

À partir de Mysql version 5.7.5  : le mode SQL est activé par défaut ONLY_FULL_GROUP_BY.

Avant la version 5.7.5  : Non activé par défaut ONLY_FULL_GROUP_BY.

Si le mode ONLY_FULL_GROUP_BY SQL模式(从版本5.7.5开始默认启用),MySQL将拒绝查询选择列表、HAVING条件或ORDER BY列表引用非聚合列,这些列既不在GROUP BYSQL est activé (activé par défaut à partir de la version 5.7.5), MySQL rejettera les listes de sélection de requêtes, les conditions HAVING ou les listes ORDER BY qui font référence à des éléments non -aggregate columns, Ces colonnes ne sont ni nommées dans la clause GROUP BY ni n'en dépendent.

Pour résoudre ce problème, utilisez l'une des trois solutions suivantes

(1) PHPMyAdmin

Désactivé : ONLY_FULL_GROUP_BYMode

Si vous utilisez phpMyAdmin, veuillez modifier les paramètres sql_mode conformément à la capture d'écran ci-dessous.

Modifiez la variable sql mode et supprimez le sql mode变量并从值中删除ONLY_FULL_GROUP_BYtext

de la valeur

ou

(2) SQL/Invite de commandes

Désactivez en exécutant la commande suivante : ONLY_FULL_GROUP_BYmode.

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

ou

(3) Ne pas utiliser SELECT *

Ne désactivez pas le mode ONLY_FULL_GROUP_BY, mais plutôt

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


Instructions importantes

Les modifications apportées à l'aide de point(1)或point(2) ne sont pas définies de manière permanente et seront restaurées après chaque redémarrage.

Par conséquent, vous devez définir ceci dans le fichier de configuration (par exemple dans [mysqld]部分的/etc/mysql/my.cnf) afin que les modifications persistent après le redémarrage de MySQL :

Profil : /etc/mysql/my.cnf

Nom de la variable : sql_mode 或者 sql-mode

ou

sql-mode ONLY_FULL_GROUP_BYSupprimez le mot de la valeur

et enregistrez le fichier. sql_modeRemarque

 : Si la 🎜variable n'est pas trouvée dans le fichier de configuration, veuillez insérer les 2 lignes suivantes à la fin du fichier🎜
[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
P粉278379495

Ceci

Ce problème sera résolu simplement en changeant le mode SQL dans MySQL, en utilisant la commande suivante :

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

Ça marche pour moi aussi... Je l'ai utilisé parce que dans mon projet j'avais beaucoup de requêtes similaires, j'ai donc simplement changé ce modèle SQL en only_full_group_by

Ou incluez simplement toutes les colonnes spécifiées par l'instruction SELECT dans la clause GROUP BY. sql_mode peut rester activé.

Merci... :-)


Date de mise à jour : 14 juillet 2023

Changer le schéma SQL est une solution de contournement, mais la meilleure pratique pour les langages de requête structurés serait d'éviter de sélectionner toutes les colonnes (SELECT *...) et d'utiliser à la place des fonctions d'agrégation sur les colonnes de regroupement, comme le fait @Tim Biegeleisen ci-dessous mentionné dans la réponse à https://stackoverflow.com/a/41887524/3602846

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal