AM en utilisant MySQL 5.7.13 sur mon PC Windows avec WAMP Server
Voici mon problème 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`
Je reçois toujours une erreur comme celle-ci
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 n'est pas fonctionnellement dépendante des colonnes de la clause GROUP BY; ceci est incompatible avec sql_mode = only_full_group_by
Pouvez-vous me dire la meilleure solution ...
J'ai besoin d'un résultat comme
+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+
| 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 |
+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+
mysql
group-by
mysql-error-1055
Dhanu K
la source
la source
SELECT *
.tbl_customer_pod_uploads
WHEREload_id
= '78' ANDstatus
= 'Active' GROUP BYproof_type
only_full_group_by
mode SQL.tbl_customer_pod_uploads
WHEREload_id
= '78' ANDstatus
= 'Active' GROUP BYproof_type
Réponses:
Ce
sera simplement résolu en changeant le mode sql dans MySQL par cette commande,
Cela fonctionne aussi pour moi .. J'ai utilisé ceci, car dans mon projet il y a beaucoup de requêtes comme celle-ci, donc j'ai juste changé ce mode sql en only_full_group_by
Je vous remercie... :-)
la source
Lorsque le
only_full_group_by
mode MySQL est activé, cela signifie que des règles SQL ANSI strictes s'appliqueront lors de l'utilisationGROUP BY
. En ce qui concerne votre requête, cela signifie que si vous êtesGROUP BY
de laproof_type
colonne, vous ne pouvez sélectionner que deux choses:proof_type
colonne, ouPar « agrégats » d'autres colonnes, je veux dire en utilisant une fonction d' agrégation tels que
MIN()
,MAX()
ouAVG()
avec une autre colonne. Donc, dans votre cas, la requête suivante serait valide:La grande majorité de MySQL
GROUP BY
questions que je vois sur SO ont le mode strict désactivé, donc la requête est en cours d'exécution, mais avec des résultats incorrects. Dans votre cas, la requête ne s'exécutera pas du tout, vous obligeant à réfléchir à ce que vous voulez vraiment faire.Remarque: Le SQL ANSI étend ce qui est autorisé à être sélectionné en
GROUP BY
incluant également des colonnes qui dépendent fonctionnellement de la ou des colonnes sélectionnées. Un exemple de dépendance fonctionnelle serait le regroupement par une colonne de clé primaire dans une table. Étant donné que la clé primaire est garantie d'être unique pour chaque enregistrement, la valeur de toute autre colonne serait également déterminée. MySQL est l'une des bases de données qui permet cela (SQL Server et Oracle n'AFAIK).la source
GROUP BY
est presque toujours une mauvaise idée. Cela me fait peur que tant d'utilisateurs prennent les mauvais conseils et les utilisent.Utilisez n'importe quelle solution
(1) PHPMyAdmin
si vous utilisez phpMyAdmin, modifiez le paramètre " sql_mode " comme indiqué dans la capture d'écran ci-dessous.
Modifiez la variable "mode sql" et supprimez le texte "ONLY_FULL_GROUP_BY" de la valeur
(2) Invite SQL / Commande Exécutez la commande ci-dessous.
(3) ** Ne pas utiliser SELECT ***
Utilisez la colonne appropriée dans la requête SELECT. pertinent signifie les colonnes, qui viennent soit dans la clause "group by", soit dans la colonne avec la fonction d'agrégation (MAX, MIN, SUM, COUNT, etc.)
Note importante
Les modifications apportées à l'aide du point (1) OU du point (2) ne le définiront pas de manière PERMANENTE et il reviendra après chaque redémarrage.
Vous devez donc définir ceci dans votre fichier de configuration (par exemple /etc/mysql/my.cnf dans la section [mysqld]), afin que les modifications restent en vigueur après le redémarrage de MySQL:
Fichier de configuration : /etc/mysql/my.cnf
Nom de la variable : sql_mode OU sql-mode
la source
La méthode ci-dessous a résolu mon problème:
Dans ubuntu
Type:
sudo vi /etc/mysql/my.cnf
tapez A pour entrer en mode insertion
Dans la dernière ligne, collez sous le code de deux lignes:
Tapez esc pour quitter le mode d'entrée
Tapez
sudo service mysql restart
pour redémarrer MySQL.la source
Vous pouvez désactiver sql_mode = only_full_group_by par une commande, vous pouvez essayer cela par terminal ou MySql IDE
la source
Dans Ubuntu
Étape 1:
Étape 2: allez à la dernière ligne et ajoutez ce qui suit
Étape 3: Enregistrer
Étape 4: Redémarrez le serveur mysql.
la source
Vous pouvez le résoudre en changeant le mode sql avec cette commande:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
et ... pensez à reconnecter la base de données !!!
la source
allez dans le phpmyadmin et ouvrez la console et exécutez cette requête
la source
Recherchez "SQL mode" si vous utilisez PhpMyAdmin et retirez la valeur:,
ONLY_FULL_GROUP_BY
juste fait et ça va.la source
De son apparence, je pense que le regroupement par plusieurs colonnes / champs ne nuira pas à votre résultat. Pourquoi n'essayez-vous pas d'ajouter au groupe comme ceci:
Cela regroupera d'
proof_type
abord ensuiteid
. J'espère que cela ne modifie pas les résultats. Dans certains / la plupart des cas, le regroupement par plusieurs colonnes donne des résultats erronés.la source
Entrez ci-dessous
Ctrl + O => Y = Ctrl + X
la source
Salut au lieu de prendre toutes les colonnes, prenez simplement ce dont vous avez besoin en utilisant
ANY_VALUE(column_name)
. Cela fonctionne parfaitement. Vérifiez simplement.Par exemple:
la source
C'est tout.
Je l'ai fait dans mon Ec2 et cela a fonctionné comme du charme.
la source
Voici un moyen très rapide et simple de le configurer de manière permanente
NB: l'exécution
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
est temporaire et au redémarrage du serveur, vous vous retrouverez toujours avec l'erreur. Pour résoudre ce problème de manière permanente, procédez comme suitwget https://gist.githubusercontent.com/nfourtythree/90fb8ef5eeafdf478f522720314c60bd/raw/disable-strict-mode.sh
chmod +x disable-strict-mode.sh
./disable-strict-mode.sh
Et vous avez terminé, des modifications seront apportées à mysql et il sera redémarré
la source
Mise à jour pour MySQL 8.0
Votre
sql-mode
n'aura pasNO_AUTO_CREATE_USER
comme il a été supprimé comme mentionné ici - comment-définir-sql-mode-in-my-cnf-in-mysql-8De plus, si quelqu'un n'a pas de
my.cnf
fichier, il en crée un nouveau/etc/my.cnf
et ajoute les lignes ci-dessus.la source
Dans votre
my.ini
, écrivez ceci:dépendent de votre version. Ou:
ou supprimez simplement ceci:
ONLY_FULL_GROUP_BY
la source
Ouvrez votre panneau WAMP et ouvrez le fichier de configuration MySQL. Dans celui-ci, recherchez "sql_mode" si vous le trouvez, réglez-le sur "" sinon si vous ne le trouvez pas, ajoutez sql_mode = "" au fichier.
Redémarrez le serveur MySQL et vous êtes prêt à partir ...
bon codage.
la source