2017-09-28 1 views
0

내 컴퓨터에서 linux mint를 사용 중이고 쿼리를 실행하려고합니다. 실행 후, 에러가오류 3065 (HY000)를 표시하여 별개 및 순서가있는 MySQL 쿼리

ERROR 3065 (HY000) 표시 : 절 BY ORDER 발현 # 1 참조 컬럼 SELECT 목록에있는 'shelterl_local.animal.changed는 "SELECT 목록에없는; 이것은 내가 /etc/mysql/my.cnf 파일을 다시 시작 MySQL의에서 라인

[mysqld] 
sql-mode='' 

을 추가 DISTINCT

와 호환되지 않습니다. 하지만 여전히 같은 오류가 발생합니다. 나는 많은 솔루션을 언급했지만 나에게는 아무런 효과가 없었다. 내 쿼리는

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은 정렬 할 때 사용할 '_field_' 값을 모릅니다. 어떻게 정렬할지 알려줄 필요가 있습니다. –

+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 

업데이트 : 나도 같은 쿼리에 의해 DISTINCT와 ORDER를 사용할 때 가끔 오류를 프로그래머 알고

. 이 문제를 해결하려면 animal.changed 섹션에 [animal.changed]와 같은 별칭을 지정하고 ORDER BY [animal.changed]를 지정하면 오류가 발생하지 않습니다. 적어도 나는이 확실히 SQL 서버에서 작동 알고

예컨대

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

이 매우 기본적인하지만 당신이 얻고있는 현재 오류가 동일한 쿼리에 의해 DISTINCT와 ORDER를 사용할 수있다.

+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

@ 잭 아니, 나는 그 진술이 완전히 정확하다고는 생각하지 않는다. MySQL이 엄격 모드를 해제 한 상태에서 실행하는 것이 맞다고 생각합니다. 그렇지 않으면 OP에서 오류가 발생할 것으로 예상됩니다. 실제로, 당신이 문서를 확인한다면 당신은 종종'SELECT DISTINCT'가 후드 아래의'GROUP BY '를 사용하여 이루어진다는 것을 보게 될 것이다. –

+0

그렇습니다. 오류가 발생하면 엄격 모드를 해제해야합니다. @Arun 여기 animal.changed 명령은 출력에서 ​​그다지 의미가 없습니다.정렬을 원하는 것을 기반으로 알 수 있습니까? – Jack