문제 해결의 MySQL은 - BY 절 문제 MySQL의 GROUP를 해결하기 위해 오류가 아닌 집계 컬럼에 포함되지 않습니다

문제 해결 - 해결 의 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

[其它节点配置]

...

 

 

 

추천

출처www.cnblogs.com/shouke/p/11569464.html