MySQL에서 그룹바이를 하다보면 1055 에러를 마주하고는 한다.
이중화 서버 혹은 데모서버 실서버를 각각 두고 사용하는 경우에서는
다른 MySQL 서버에서는 잘 돌아가는 쿼리가
또 다른 서버에서는 1055 에러를 뱉는 경우가 있다.
MySQL 5.7.5 버전기준 이후부터,
[선택 목록, 조건 또는 목록이 절에 이름이 지정되지 않은 집계되지 않은 열을 참조하는 쿼리를 허용하지 않습니다]
라고 정의가 변경되었습니다 !
▶ 해결방안1. 워크벤치에서 쿼리 날리기
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); |
이 쿼리를 날리는 것은 즉,
그룹바이의 규칙을 5.7.4 버전 이전의 기준으로
돌리는 것으로 생각하시면 됩니다 !
▶ 해결방안2. 그룹바이 절에 Select네임 명명해주기
에러코드에서 뱉어주는 nonaggregated column '컬럼명' 을 그룹바이 절에 명시해주면 해결됩니다.
예를 들어
Error Code: 1055. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'A.testName' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_b |
라는 에러 코드를 뱉었다면, 해당 쿼리의 그룹바이 절에 A.testName 를 추가해주면 됩니다.
하위 버전의 MySQL을 사용하다가 5.7.5 이상의 버전으로 변경되었을때는 모든 그룹바이의 쿼리를 바꿔주기는
방대하기때문에 첫번째 방안을 활용하면 좋을 것 같습니다.
개인적으로 오라클 포스트그레스큐엘 티베로 MySQL 등등 다양하게 써보았지만, 오라클을 제외한 몇몇 DB들은
' 이게돌아가..? ' 할정도로 Group by 나 join에 대해서 규칙이 난해한 경우가 많은것같다 ... !
▶ 참고문서
MySQL :: MySQL 5.7 Reference Manual :: 12.20.3 MySQL Handling of GROUP BY
'데이터베이스 > MySQL, MariaDB' 카테고리의 다른 글
[mariaDB] ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes (0) | 2022.04.08 |
---|---|
MySQL DB백업 및 원격서버 파일 전송 (2) | 2021.05.11 |
댓글