"Les colonnes non agrégées de l'instruction SELECT n'apparaissent pas dans la clause GROUP BY et sont incompatibles avec sql_mode=only_full_group_by"
P粉034571623
P粉034571623 2023-08-20 13:44:52
0
2
513
<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 la colonne dans 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 | identifiant_chargement | latitude | type_document | nom_fichier | +----+---------+---------+---------+----------+--- --------+----------------+--------------+-------------- ------- --+----------------+--------+-------------- -------+--- -----+ | 1 | 78 | 21.1212 | 21.5454 | id_Card.docx 0 | +----+---------+---------+---------+----------+--- --------+----------------+--------------+-------------- ------- --+----------------+--------+-------------- -------+--- ----+</pré> <p><br /></p>
P粉034571623
P粉034571623

répondre à tous(2)
P粉523625080

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 liées à leur fonctionnalité.

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, modifiez les paramètres sql_mode selon 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.)


Conseils importants

Les modifications apportées à l'aide de 点(1)或点(2) ne sont pas des paramètres permanents et seront restaurées après chaque redémarrage.

Par conséquent, vous devez définir cela dans un fichier de configuration (par exemple, dans un fichier [mysqld]部分的/etc/mysql/my.cnf) pour conserver les modifications en vigueur après un 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粉121081658

Ce problème peut être résolu simplement en modifiant le schéma SQL dans MySQL, en utilisant la commande suivante :

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

Fonctionne pour moi aussi...

J'ai utilisé cette méthode car il existe de nombreuses requêtes similaires dans mon projet, j'ai donc simplement changé le mode 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 est d'éviter de sélectionner toutes les colonnes (SELECT *...) et d'utiliser à la place des fonctions d'agrégation sur des colonnes groupées, 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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!