2013-06-11 2 views
1

이것은 내 SQL입니다.GROUP BY가 ORDER BY가 작동하지 않음

SELECT 
    cs.name, 
    ct.name AS type, 
    cr.date, 
    cr.hg_version, 
    cr.public, 
    cr.tag, 
    cr.reference, 
    cr.description 
FROM changelog_systems cs 
LEFT JOIN changelog_rows cr ON cr.changelog_system_id = cs.id 
LEFT JOIN changelog_types ct ON ct.id = cr.type_id 
GROUP BY name 
ORDER BY cr.date ASC 

문제는 내가 최신 날짜로 시스템을 가져 오지 못한다는 것입니다. 대신에 그것은 단지 GROUP BY에서 살아남는 마지막 행을 얻습니다.

+3

왜 집계를하지 않으므로'GROUP BY'를 사용하고 있습니까? –

+0

당신은 질의 (부분적으로 그룹)를 표준화해야합니다, 나는 여기서 그것이 다소 불분명 한 문제를 드러 낼 것이라고 생각합니다. – Sebas

+1

'group by '의 사용법은 SQL에서는 유효하지 않으며 모든 다른 DBMS (그리고 올바르게 구성된 경우 MySQL)에 의해 거부 될 것입니다. "잘못된"쿼리로 인해 왜 일관성없는 결과가 나오는 지 이해하려면 다음을 읽어보십시오. http://rpbouman.blogspot.de/2007/05/debunking-group-by-myths.html 및 http://www.mysqlperformanceblog.com/ 2006/09/06/wrong-group-by-makes-your-queries-fragile / –

답변

1

실제로 쿼리가 잘못되었습니다. SELECT 절에서 집계되지 않은 열을 사용할 수 없습니다. 이름으로 그룹화하고 SELECT 절의 다른 모든 열은에 의해 그룹화되지 않습니다. ONLY_FULL_GROUP_BY 옵션을 설정하지 않아도 MySQL은 여전히이 (잘못된) 쿼리를 받아들이지 만 덜 바람직하지는 않습니다. 따라서 쿼리를 다시 작성하여 예측 가능한 결과를 얻을 수 있도록해야합니다. 더 많은 정보를 원하시면 다음을보십시오 : http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html#sqlmode%5Fonly%5Ffull%5Fgroup%5Fby

관련 문제