Maison > Questions et réponses > le corps du texte
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 | +----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+
P粉0990000442023-10-11 11:07:33
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éfaut
Avant la version 5.7.5 : Non activé par défaut ONLY_FULL_GROUP_BY
.
Si le ONLY_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 conditions
Pour résoudre le problème, utilisez l'une des solutions (1 sur 3 ci-dessous)
(1) PHPMyAdmin
ONLY_FULL_GROUP_BY
: Modesql_mode
Si vous utilisez phpMyAdmin, modifiez les paramètres
sql mode
变量并从值中删除ONLY_FULL_GROUP_BY
Modifiez la variable mode SQL et supprimez text
de la valeurou
(2) SQL/Invite de commandesONLY_FULL_GROUP_BY
Désactiver : désactivez le mode en exécutant la commande suivante.
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
ou SELECT *
(3) Ne pas utiliser ONLY_FULL_GROUP_BY
NE PAS DÉSACTIVER LE SELECT
查询中使用相关列。相关意味着列,它们要么出现在 group by
子句中,要么出现在具有聚合函数的列(MAX
、MIN
MODE, MAIS 代码>
<代码>Dans 代码>,
point(1) OR point(2)
Instructions importantes
[mysqld]
部分中的 /etc/mysql/my.cnf
Les modifications apportées à l'aide de
Par 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
OR sql-mode
/etc/mysql/my.cnf
Nom de la variableONLY_FULL_GROUP_BY
:
sql-mode
sql_mode
Supprimez le mot
[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粉9094764572023-10-11 00:45:13
Ceci
Cela peut être facilement résolu en changeant le mode SQL dans MySQL via cette commande,
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
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