recherche

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

Les colonnes de l'instruction SELECT ne sont pas dans la clause GROUP BY et contiennent des colonnes non agrégées....Incompatible 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 les colonnes de 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 | ID_chargement | latitude | type_document | nom_fichier | +----+---------+---------+---------+----------+--- --------+----------------+--------------+-------------- ------- --+----------------+--------+-------------- -------+--- -----+ | 1 | 1 | 78 | 21.1212 | 21.5454 | id_Card.docx 0 | +----+---------+---------+---------+----------+--- --------+----------------+--------------+-------------- ------- --+----------------+--------+-------------- -------+--- ----+</pré> <p><br /></p>
P粉521748211P粉521748211459 Il y a quelques jours623

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

  • P粉300541798

    P粉3005417982023-08-22 11:53:58

    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 n'en dépendent.

    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, veuillez modifier les paramètres sql_mode conformément à 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.)


    Instructions importantes

    Les modifications apportées à l'aide de point(1)或point(2) ne sont pas définies de manière permanente et seront restaurées après chaque redémarrage.

    Par conséquent, vous devez définir ceci dans le fichier de configuration (par exemple dans [mysqld]部分的/etc/mysql/my.cnf) afin que les modifications persistent après le 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粉278379495

    P粉2783794952023-08-22 11:13:03

    Ceci

    Ce problème sera résolu simplement en changeant le mode SQL dans MySQL, en utilisant la commande suivante :

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

    Ça marche pour moi aussi... Je l'ai utilisé parce que dans mon projet j'avais beaucoup de requêtes similaires, j'ai donc simplement changé ce modèle 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 serait d'éviter de sélectionner toutes les colonnes (SELECT *...) et d'utiliser à la place des fonctions d'agrégation sur les colonnes de regroupement, comme le fait @Tim Biegeleisen ci-dessous mentionné dans la réponse à https://stackoverflow.com/a/41887524/3602846

    répondre
    0
  • Annulerrépondre