2017-09-28 32 views
0

不同和排序的MySQL查询我在我的机器中使用linux mint并尝试执行查询。在该执行后,则显示错误通过显示错误3065(HY000)

ERROR 3065(HY000):ORDER BY子句表达#1不处于SELECT列表中,参考文献列 'shelterl_local.animal.changed' 这是不是在SELECT列表;这与DISTINCT

不相容我添加的行

[mysqld] 
sql-mode='' 

/etc/mysql/my.cnf文件并重新启动mysql的。但仍然有同样的错误。我提到了许多解决方案,但没有为我工作。我的查询是

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; 

是否可以永久删除此错误并执行查询?请帮助

+0

MySQL不知道在排序时使用'field2'的_which_值。你需要告诉我们你想如何排序。 –

+0

@TimBiegeleisen,我添加了实际的查询。请看看 – Arun

+0

完整的查询实际上在很大程度上与您的问题无关。您可以在下面对我的回答发表评论。 –

回答

0

实际上你需要选择Field2

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

UPDATE:

我知道有时使用DISTINCT和ORDER BY在相同的查询时,那里有错误。为了解决这个问题,我会给animal.changed部分添加一个ALIAS,例如[animal.changed],然后如果你的ORDER BY [animal.changed],这应该不会出错。至少我知道这在SQL服务器肯定工程

E.G

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

这是很基本的,但将允许你在这是你得到的电流误差相同的查询使用DISTINCT和ORDER BY。

+0

我需要在编辑的问题中工作查询。请看看 – Arun

+0

这将修复错误,但它是一个不同的查询。 –

+0

对不起,我没有看到更新 –

1

您最初的查询等效于以下内容:

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

这不能使逻辑意义,因为在结果集的field1每个值可以有多个与之相关field2值。你看到的错误是MySQL说它无法弄清楚你想要做什么的方式。一种解决方法是按照例如field2的合计排序。请尝试以下操作:

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

在案例1:Mysql会考虑先录入的任何一个,但不会产生错误。 – Jack

+0

@Jack不,我不相信这个陈述是完全准确的。如果MySQL在严格模式关闭的情况下运行,我认为你是正确的,否则我会期望从OP发生错误。实际上,如果你检查文档,你会发现通常'SELECT DISTINCT'是在引擎盖下使用'GROUP BY'完成的。 –

+0

如果出现这种错误,应该关闭严格模式。 @Arun这里order by animal.changed在输出中没有太多意义。我可以根据你希望排序的内容来知道吗? – Jack