<MYSQL ERROR CODE: 1055>
Error Code: 1055. Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mywork.box_office.ranks' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Error Code: 1055. Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mywork.box_office.ranks' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Windows 에서는 잘만 되는 코드가 Mac 에서는 Error Code: 1055 가 발생하여 알아보니
MySQL 5.7.5 버전기준 이후부터,
[선택 목록, 조건 또는 목록이 절에 이름이 지정되지 않은 집계되지 않은 열을 참조하는 쿼리를 허용하지 않습니다]
라고 정의가 변경되었다고 한다.
즉,
--> group by 쿼리에 대한 비효율성 해결을 위해 sql_mode 플래그에 only_full_group_by 를 추가
이를 해결할 수 있는 방안은 구글링을 해보니 크게 2~3가지 정도 있는 듯 하였지만
결국 제일 문제가 되는 ONLY_FULL_GROUP_BY 를 지워주면 된다.
SQL workbench를 이용한다면 workbench에서, 터미널을 이용한다면 터미널에서 없애준다.
1. 터미널
터미널에 들어가서 아래와 같이 코드를 입력
# sql 경로로 이동
cd /usr/local/mysql/bin/
# 설정한 루트 비밀번호를 p 뒤에 바로 입력 또는 Enter 후 pw 입력하여 sql에 접속한다
./mysql -uroot -p
# 결과
Enter password: _____
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 8.0.30 MySQL Community Server - GPL
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
sql_mode 조회(방법 2가지)
# 조회 방법 1
mysql> show variables like 'sql_mode';
# 결과
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| sql_mode | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
# 조회 방법 2
mysql> select @@sql_mode;
# 결과
+-----------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
위와 같이 설치된 sql_mode 값을 확인하였을 때 ONLY_FULL_GROUP_BY가 있을 건데 이를 지워주도록 한다
# 코드 입력
mysql> SET @@SQL_MODE='NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
# 결과
Query OK, 0 rows affected, 1 warning (0.00 sec)
제대로 없어졌는지 다시 조회
# 처음 입력했던 조회 방법 중 하나 선택하여 다시 조회
mysql> show variables like 'sql_mode';
# 결과
+---------------+--------------------------------------------------------------------------------+
| Variable_name | Value |
+---------------+--------------------------------------------------------------------------------+
| sql_mode | NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+---------------+--------------------------------------------------------------------------------+
1 row in set (0.00 sec)
ONLY_FULL_GROUP_BY... 가 없어진 것을 확인할 수 있다.
2. Workbench
워크벤치에 접속하여 아래 코드 입력
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
터미널에서의 방법으로 해결이 될테지만 나는 무슨 이유에서인지 터미널에서 위와 같이 했음에도
없앴던 ONLY_FULL_GROUP_BY 가 재접속하였을 때 다시 살아나서 에러를 고칠 수 없었지만
Workbench에서의 방법을 써서 해결했고 에러가 다시 발생하지 않았다.
MYSQL을 터미널에서보다 주로 Workbench에서 사용을 하는데 뭔가 모종의 이유로 충돌하는 것인지 뭔지 잘은 모르겠지만
위에 소개했던 방법 두가지를 쓰면 Error Code: 1055 는 해결될 것이다.
'Mysql' 카테고리의 다른 글
[MySQL] 테이블 및 데이터 타입 (0) | 2022.08.16 |
---|---|
[MYSQL] 데이터베이스와 SQL (0) | 2022.08.15 |
[SQL] CRUD 사용 (0) | 2022.08.11 |