SQL_MODE=only_full_group_by : La liste SELECT n'est pas dans la clause GROUP BY et contient des colonnes non agrégées....Incompatible
P粉850680329
P粉850680329 2023-10-10 13:41:44
0
2
468

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粉850680329
P粉850680329

répondre à tous (2)
P粉099000044

Il existe une variable systèmeONLY_FULL_GROUP_BYdans le moteur MySql.

À partir de Mysql version 5.7.5:ONLY_FULL_GROUP_BYLe mode SQL est activé par défaut

Avant la version 5.7.5: Non activé par défautONLY_FULL_GROUP_BY.

Si leONLY_FULL_GROUP_BYSQL 模式(从版本 5.7.5 开始默认启用),MySQL 将拒绝选择列表、HAVING条件或ORDER BY列表指的是非聚合列,这些列既未在GROUP BYmode SQL est activé (activé par défaut à partir de la version 5.7.5), MySQL rejettera les listes de sélection, les conditions

HAVING ou les listes

ORDER 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) PHPMyAdminONLY_FULL_GROUP_BY

Désactivé

:Modesql_modeSi vous utilisez phpMyAdmin, modifiez les paramètres

comme indiqué dans la capture d'écran ci-dessous.

sql mode变量并从值中删除ONLY_FULL_GROUP_BY

Modifiez la variablemode SQL et supprimeztext

de la valeur

ou

(2) SQL/Invite de commandesONLY_FULL_GROUP_BY

Désactiver: désactivez le modeen exécutant la commande suivante.

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

ouSELECT *

(3) Ne pas utiliserONLY_FULL_GROUP_BY

NE PAS DÉSACTIVER LESELECT查询中使用相关列。相关意味着列,它们要么出现在group by子句中,要么出现在具有聚合函数的列(MAXMINMODE, MAIS 代码> Dans 代码>,

SUM
,

COUNT, etc.)

point(1) OR point(2)Instructions importantes

[mysqld]部分中的/etc/mysql/my.cnfLes modifications apportées à l'aide de

point(1) OU point(2) ne le définissent pas de manière permanente et seront restaurées après chaque redémarrage.

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_modeORsql-mode/etc/mysql/my.cnf

Nom de la variableONLY_FULL_GROUP_BY:

OR

sql-modesql_modeSupprimez le mot

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 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粉909476457

    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

      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!