문제 해결 - 해결 의 MySQL 에 포함되지 않은 비 - 고분자 열 BY GROUP 절 오류 문제
작성자 : 고객 부여 QQ를 : 1,033,553,122을
테스트 환경
win10
MySQL의 5.7
문제 설명 :
다음과 같이 MySQL의 쿼리,
SELECT ID, 이름, 이름 case_table 그룹에서 CNT AS 수 (*)
오류로는 다음과 같습니다 :
服务器 内部 错误 (1055 "SELECT리스트 식 1 절에 의해 그룹에서 아니며 절 BY GROUP 열에 기능적으로 의존하지 집계되지 열의 case_table.id '을 포함,이 ONLY_FULL_GROUP_BY sql_mode = 호환되지 않는")
이유 : 비 고분자 열 ID의 존재는, GROUP BY 절에 포함되지 않습니다.
그러나이 경우, 다른 곳은 어떻게, 다음이 가정 제거 할 수 있으며, id 컬럼을 사용할 필요가? 다음과 같이
솔루션
방법 1
글로벌 sql_mode를 조회
GLOBAL.sql_mode를 SELECT @@;
또는
@@ sql_mode를 선택
다음과 같이 쿼리 결과는 다음과 같습니다
ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION ';
SET SESSION
다음과 같이 복사 쿼리 결과 값은 다음 "ONLY_FULL_GROUP_BY"SESSION 쿼리의 결과를 제거 sql_model, 글로벌 sql_mode을 설정합니다 :
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION';
SET 세션 sql_mode = 'STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION';
참고 :이 방법은 임시 변경에 사용되는 MySQL은, 위의 무효화를 다시 시작합니다.
방법 2
당신은 MySQL의를 시작하면 다음과 같이, sql_model 옵션을 증가 :
mysqld를 --sql_mode = "STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION"... 选项 其它]
방법 3 :
다음과 같이 리눅스 서비스에서 my.conf (Windows에서 수정의 my.ini)을 수정하려면 [mysqld를] 노드에서, 대부분의 sql_mode는 최종 구성에 추가 :
...
[mysqld를]
...
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
[其它节点配置]
...