Erreur MySQL : liste SELECT incompatible avec SQL_MODE=ONLY_FULL_GROUP_BY
Lors de l'exécution d'une requête qui inclut une instruction SELECT avec des colonnes non agrégées dans le clause de regroupement, MySQL peut renvoyer une erreur indiquant que l'expression n'est pas dans la clause GROUP BY. Cela peut se produire lorsque SQL_MODE est défini sur ONLY_FULL_GROUP_BY, ce qui nécessite que toutes les colonnes non agrégées de la liste SELECT soient incluses dans la clause GROUP BY.
Solution 1 : désactiver SQL_MODE=ONLY_FULL_GROUP_BY
Une solution consiste à désactiver le SQL_MODE=ONLY_FULL_GROUP_BY en exécutant la commande suivante :
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Cela permettra à la requête de s'exécuter sans erreur.
Solution 2 : inclure toutes les colonnes non agrégées dans GROUP Clause BY
Une autre solution consiste à inclure toutes les colonnes non agrégées dans le GROUPE Clause PAR. Cela peut être fait en modifiant la requête pour inclure les éléments suivants :
SELECT * FROM `tbl_customer_pod_uploads` WHERE `load_id` = '78' AND `status` = 'Active' GROUP BY `proof_type`, `id`
Cela garantira que toutes les colonnes non agrégées sont incluses dans la clause GROUP BY et que la requête s'exécutera sans erreur.
Solution 3 : Utiliser les fonctions d'agrégation
Pour les meilleures pratiques, envisagez d'utiliser des fonctions d'agrégation pour le colonnes non agrégées au lieu de sélectionner toutes les colonnes. Par exemple, si vous n'avez besoin que du nombre d'enregistrements pour chaque type de preuve, la requête peut être modifiée comme suit :
SELECT `proof_type`, COUNT(*) AS `total_records` FROM `tbl_customer_pod_uploads` WHERE `load_id` = '78' AND `status` = 'Active' GROUP BY `proof_type`
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!