J'utilise MySQL 5.7.13 avec le serveur WAMP sur un PC Windows
Mon problème est lors de l'exécution de cette requête
SELECT * FROM `tbl_customer_pod_uploads` WHERE `load_id` = '78' AND `status` = 'Active' GROUP BY `proof_type`
J'obtiens toujours cette erreur
L'expression n°1 de 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 ne dépend pas fonctionnellement des colonnes de la clause GROUP BY, ce qui n'est pas cohérent avec sql_mode ; =only_full_group_byCompatible
Pouvez-vous me dire la meilleure solution ?
J'ai besoin de ce résultat
+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+ | id | user_id | load_id | bill_id | latitude | langitude | proof_type | document_type | file_name | is_private | status | createdon | updatedon | +----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+ | 1 | 1 | 78 | 1 | 21.1212 | 21.5454 | 1 | 1 | id_Card.docx | 0 | Active | 2017-01-27 11:30:11 | 2017-01-27 11:30:14 | +----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+
Il existe une variable système
ONLY_FULL_GROUP_BY
dans le moteur MySql.À partir de Mysql version 5.7.5:
ONLY_FULL_GROUP_BY
Le mode SQL est activé par défautAvant la version 5.7.5: Non activé par défaut
ONLY_FULL_GROUP_BY
.Si le
HAVING ou les listesONLY_FULL_GROUP_BY
SQL 模式(从版本 5.7.5 开始默认启用),MySQL 将拒绝选择列表、HAVING
条件或ORDER BY
列表指的是非聚合列,这些列既未在GROUP BY
mode SQL est activé (activé par défaut à partir de la version 5.7.5), MySQL rejettera les listes de sélection, les conditionsORDER BY qui font référence à des colonnes non agrégées qui ne sont ni nommés dans une clause
GROUP BY, ni fonctionnellement dépendants d'eux.Pour résoudre le problème, utilisez l'une des solutions (1 sur 3 ci-dessous)
(1) PHPMyAdmin
DésactivéONLY_FULL_GROUP_BY
:Mode
comme indiqué dans la capture d'écran ci-dessous.sql_mode
Si vous utilisez phpMyAdmin, modifiez les paramètressql mode
变量并从值中删除ONLY_FULL_GROUP_BY
Modifiez la variablemode SQL et supprimeztext
de la valeurou
(2) SQL/Invite de commandes
ONLY_FULL_GROUP_BY
Désactiver: désactivez le modeen exécutant la commande suivante.
ou
SELECT *
(3) Ne pas utiliser
ONLY_FULL_GROUP_BY
NE PAS DÉSACTIVER LE
SUMSELECT
查询中使用相关列。相关意味着列,它们要么出现在group by
子句中,要么出现在具有聚合函数的列(MAX
、MIN
MODE, MAIS 代码> Dans 代码>,
,
COUNT, etc.)
point(1) OR point(2)
Instructions importantes
point(1) OU point(2) ne le définissent pas de manière permanente et seront restaurées après chaque redémarrage.[mysqld]
部分中的/etc/mysql/my.cnf
Les modifications apportées à l'aide dePar conséquent, vous devez le définir dans un fichier de configuration (par exemple[mysqld] dans la section
/etc/mysql/my.cnf
/etc/mysql/my.cnf) afin que les modifications persistent lors des redémarrages de MySQL :Fichier de configuration:
sql_mode
ORsql-mode
/etc/mysql/my.cnfNom de la variable
ORONLY_FULL_GROUP_BY
:sql-mode
de la valeur et enregistrez le fichier. Remarque : Si vous ne trouvez pas la variable dans le fichier de configuration, veuillez insérer les deux lignes suivantes à la fin du fichiersql_mode
Supprimez le motCeci
Cela peut être facilement résolu en changeant le mode SQL dans MySQL via cette commande,
Cela fonctionne pour moi aussi.. Je l'ai utilisé parce que dans mon projet il y avait beaucoup de requêtes comme celle-ci, j'ai donc simplement changé ce schéma SQL en only_full_group_by
Ou incluez uniquement toutes les colonnes dans la clause GROUP BY spécifiée par l'instruction SELECT. sql_mode peut rester activé.
Merci... :-)
Mise à jour : 14 juillet 2023
Changer le schéma SQL est une solution, mais la meilleure pratique dans les langages de requêtes structurés est toujours d'éviter de sélectionner toutes les colonnes (SELECT * ...) et d'utiliser à la place une fonction d'agrégation sur les colonnes de regroupement, comme @Tim Biegeleisen mentionné ci-dessous dans la réponse àhttps://stackoverflow.com/a/41887524/3602846