J'utilise MySQL 5.7.13 avec le serveur WAMP sur mon PC Windows
Mon problème est lors de l'exécution de cette requête
SELECT * DE `tbl_customer_pod_uploads` OÙ `load_id` = '78' ET `statut` = 'Actif' GROUPER PAR `proof_type`
J'obtiens toujours cette erreur
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
Veuillez m'indiquer la meilleure solution.
Les résultats dont j'ai besoin sont les suivants
+----+--------------+---------+------- ---+--------------+-----------+----------------+------- --- ----+--------------+------------+--------+--------- --- -------------+-----------+ | identifiant_utilisateur | identifiant_chargement | latitude | type_document | nom_fichier | +----+---------+---------+---------+----------+--- --------+----------------+--------------+-------------- ------- --+----------------+--------+-------------- -------+--- -----+ | 1 | 78 | 21.1212 | 21.5454 | id_Card.docx 0 | +----+---------+---------+---------+----------+--- --------+----------------+--------------+-------------- ------- --+----------------+--------+-------------- -------+--- ----+
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 BY
SQL est activé (activé par défaut à partir de la version 5.7.5), MySQL rejettera les listes de sélection de requêtes, les conditionsHAVING
ou les listesORDER BY
qui font référence à des éléments non -aggregate columns, Ces colonnes ne sont ni nommées dans la clauseGROUP 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_BY
ModeSi vous utilisez phpMyAdmin, modifiez les paramètres
sql_mode
selon la capture d'écran ci-dessous.Modifiez la variable
de la valeursql mode
et supprimez lesql mode
变量并从值中删除ONLY_FULL_GROUP_BY
textou
(2) SQL/Invite de commandes
Désactivezen exécutant la commande suivante :
ONLY_FULL_GROUP_BY
mode.ou
(3) Ne pas utiliser
SELECT *
Ne désactivez pas le mode
ONLY_FULL_GROUP_BY
, mais plutôtdans la colonne
SELECT
查询中使用相关列。相关列指的是在group by
子句中出现的列或带有聚合函数(MAX
、MIN
、SUM
、COUNT
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:
ousql_mode
或sql-mode
sql-mode
ONLY_FULL_GROUP_BY
Supprimez le motde la valeur et enregistrez le fichier.
: Si la variable n'est pas trouvée dans le fichier de configuration, veuillez insérer les 2 lignes suivantes à la fin du fichiersql_mode
RemarqueCe problème peut être résolu simplement en modifiant le schéma SQL dans MySQL, en utilisant la commande suivante :
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éponsehttps://stackoverflow.com/a/41887524/3602846