Error Code: 1055. Expression #7 of SELECT list is not in GROUP BY clause and contains nonaggregated column which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 오류

개발새발·2023년 2월 25일
0

db

목록 보기
10/10

자바스터디를 하다가 sql 오류문이 떴는데, 처음 보는 오류라 기록하기루 결심~

원인

검색해보니 MYSQL 5.7.5 버전부터 [선택 목록, 조건 또는 목록이 절에 이름이 지정되지 않은 집계되지 않은 열을 참조하는 쿼리를 허용하지 않습니다] 라고 한다. 뭔소리인고 하니.. 아래와 같이 grouping을 하지 않은 필드(group1)를 select문에 넣으면 오류가 난다.

SELECT group1, group2 FROM table
WHERE case = "블라블라"
GROUP BY group2;

해결

방법은 세가지를 찾았다.

  1. sql_mode 설정 변경
    sql_mode에 설정되어 있는 ONLY_FULL_GROUP_BY 속성을 끄는 방법이다. 구글링해본 방법은 아래와 같다.
    /* 현재 설치된 sql_mode의 값을 확인한다 */
    mysql> SHOW VARIABLES LIKE 'SQL_MODE'; 
    
    /* 기존의 값들을 복사한 뒤, ONLY_FULL_GROUP_BY 속성만 제외하고 다시 setting해준다 */
    SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
  1. 그룹바이의 규칙을 5.7.4 이전 버전의 기준으로 돌리기
    MYSQL 5.7.5 부터 정의된 규칙이니 group by 규칙을 그 이전으로 돌리는 방법이다. 구글링해본 방법은 아래와 같다.
    SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
  1. 그룹바이 절에 select 네임 명명해주기
    개인적으로 세팅을 변경하는 것보다 쿼리문에서 바꿀 수 있는 방법을 선호하는 편이라 1,2번이 아닌 요 방법으로 해결했다.
    SELECT group1, group2 FROM table
    WHERE case = "블라블라"
    GROUP BY group1, group2;

cc. https://2day-is-seonday.tistory.com/91 , https://velog.io/@moojun3/MySQL-Error-Code-1055-onlyfullgroupby

profile
발새발개

0개의 댓글