recherche

Maison  >  Questions et réponses  >  le corps du texte

"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>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粉034571623P粉034571623472 Il y a quelques jours528

répondre à tous(2)je répondrai

  • P粉523625080

    P粉5236250802023-08-21 10:10:51

    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
    

    répondre
    0
  • P粉121081658

    P粉1210816582023-08-21 00:49:48

    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

    répondre
    0
  • Annulerrépondre