2017-09-28 8 views
0

J'utilise linux mint dans ma machine et j'essaie d'exécuter une requête. Après l'exécution, une erreur est affichéeRequête MySQL avec distinct et ordre en affichant l'erreur 3065 (HY000)

erreur 3065 (HY000): Expression # 1 clause ORDER BY est pas dans la liste SELECT, référence à la colonne 'shelterl_local.animal.changed' qui ne sont pas dans la liste SELECT; ce qui est incompatible avec DISTINCT

J'ai ajouté la ligne

[mysqld] 
sql-mode='' 

dans le fichier /etc/mysql/my.cnf et redémarré mysql. Mais toujours obtenir la même erreur. J'ai référé beaucoup de solutions mais rien n'a fonctionné pour moi. Ma requête est

SELECT DISTINCT fs.etid AS etid FROM og_membership fs 
LEFT OUTER JOIN node animal ON animal.nid = fs.etid LEFT OUTER JOIN 
field_data_field_for_animal dfa ON dfa.field_for_animal_value = fs.etid 
LEFT OUTER JOIN node pastid ON pastid.nid = dfa.entity_id WHERE ((fs.gid = 
464) OR 
(animal.nid IN 
(1196113,1211208,1218831,1243640,1254254, 
1253603,1249890,1261729,1261282,1258378,1273745,1270760, 
1279219,1276040,1276031,1275684,1288727,1289306,1300545, 
1313770,1313761,1313755,1313746,1313330,1312388,1310673, 
1309431,1315024,1333640,1328041,1323565,1327216,1330104, 
1327786,1326810,1335812,1333094,1341309,1340358,1348088, 
1351077,1351071,318214,1342698,1472755,1491527,1351652,1353488, 
1507763,1342713)))AND (fs.entity_type = 'node') 
AND (animal.type = 'animal') AND (animal.status = 1) AND (pastid.title LIKE 
'%A%') 
ORDER BY animal.changed DESC LIMIT 0,300; 

Est-il possible de supprimer définitivement cette erreur et d'exécuter la requête? S'il vous plaît aider

+0

MySQL ne connaît pas la valeur _which_ de 'field2' à utiliser lors du tri. Vous devez nous dire comment vous voulez trier. –

+0

@TimBiegeleisen, j'ai ajouté la requête réelle. S'il vous plaît jeter un oeil – Arun

+0

La requête complète est en fait largement hors de propos pour votre question. Vous pouvez commenter ma réponse ci-dessous. –

Répondre

0

Vous devez sélectionner effectivement field2

SELECT DISTINCT field1 AS f1, 
    field2 
    FROM table t 
    --Joins and conditions 
    ORDER BY field2 DESC LIMIT 0,300 

MISE À JOUR:

Je sais theres parfois des erreurs lors de l'utilisation et DISTINCT ORDER BY dans la même requête. Pour résoudre ce problème, je donnerais à la section animal.changed un ALIAS tel que [animal.changed] et si vous ORDREZ PAR [animal.changed] cela ne devrait pas causer d'erreur. Je sais que cela fonctionne certainement au moins dans le serveur SQL

par exemple

SELECT DISTINCT animal.changed AS [animal.changed] 
    FROM ..... 
    ORDER BY [animal.changed] 

Ceci est très basique, mais vous permettra d'utiliser DISTINCT et ORDER BY dans la même requête qui est l'erreur actuelle que vous obtenez.

+0

Je dois travailler la question dans la question éditée pour fonctionner. S'il vous plaît jeter un oeil – Arun

+0

Cela permettrait de corriger l'erreur, mais c'est une requête différente. –

+0

Désolé je n'ai pas vu la mise à jour –

1

Votre requête initiale est équivalente à ce qui suit:

SELECT field1 AS f1 
FROM table t 
--Joins and conditions 
GROUP BY field1 
ORDER BY field2 DESC LIMIT 0,300 

Cela ne peut pas donner un sens logique, parce que chaque valeur de field1 dans le jeu de résultats peut avoir plusieurs valeurs de field2 associées. L'erreur que vous voyez est la façon de MySQL de dire qu'il ne peut pas comprendre ce que vous voulez faire. Une solution de contournement consiste à trier sur un agrégat de field2, par exemple. essayez ce qui suit:

SELECT field1 AS f1 
FROM table t 
--Joins and conditions 
GROUP BY field1 
ORDER BY MAX(field2) DESC -- or AVG(field2), or MIN(field2), etc. 
LIMIT 0,300 
+0

Dans le cas 1: Mysql considérera le premier arrivé dans l'enregistrement mais il ne générera pas une erreur. – Jack

+0

@Jack Non, je ne crois pas que cette affirmation soit complètement exacte. Je pense que vous avez raison si MySQL fonctionne avec le mode strict désactivé, sinon je m'attendrais à l'erreur de l'OP. En fait, si vous vérifiez la documentation, vous verrez que souvent 'SELECT DISTINCT' est fait en utilisant' GROUP BY' sous le capot. –

+0

Oui, le mode strict doit être désactivé si une telle erreur s'est produite. @Arun Ici l'ordre par animal.changed n'a pas beaucoup de sens en sortie.Puis-je savoir en fonction de ce que vous souhaitez trier. – Jack