P粉5236250802023-08-21 10:10:51
MySQL 엔진에는 시스템 변수 ONLY_FULL_GROUP_BY
가 있습니다.
MySQL 버전 5.7.5부터 : SQL 모드는 기본적으로 활성화됩니다 ONLY_FULL_GROUP_BY
.
버전 5.7.5 이전 : 기본적으로 활성화되어 있지 않습니다 ONLY_FULL_GROUP_BY
.
SQL 모드가 활성화된 경우(버전 5.7.5부터 기본적으로 활성화됨), MySQL은 쿼리 선택 목록, HAVING
조건 또는 non을 참조하는 ORDER BY
목록을 거부합니다. -집계 열, 이 열은 GROUP BY
절에 이름이 지정되지 않았으며 해당 기능과도 관련이 없습니다. ONLY_FULL_GROUP_BY
SQL模式(从5.7.5版本开始默认启用),MySQL将拒绝查询选择列表、HAVING
条件或ORDER BY
列表引用非聚合列,这些列既不在GROUP BY
(1) PHPMyAdmin
Disabled: 모드ONLY_FULL_GROUP_BY
sql 모드
변수를 편집하고 값에서 textsql mode
变量并从值中删除ONLY_FULL_GROUP_BY
를 제거합니다.
또는
(2) SQL/명령 프롬프트
다음 명령을 실행하여 비활성화합니다: mode. ONLY_FULL_GROUP_BY
으아악
또는
(3) SELECT *
을 사용하지 마세요.
모드를 비활성화하지 말고 대신 ONLY_FULL_GROUP_BY
등) 열 SELECT
查询中使用相关列。相关列指的是在group by
子句中出现的列或带有聚合函数(MAX
、MIN
、SUM
、COUNT
을 사용하여 변경한 사항은 영구적인 설정이 아니며 재부팅할 때마다 복원됩니다. 点(1)或点(2)
파일)에서 이를 설정해야 합니다. [mysqld]
部分的/etc/mysql/my.cnf
프로필: /etc/mysql/my.cnf
변수 이름: sql_mode
或 sql-mode
또는
sql-mode
값에서 ONLY_FULL_GROUP_BY
참고sql_mode
:
P粉1210816582023-08-21 00:49:48
이 문제는 다음 명령을 사용하여 MySQL에서 SQL 스키마를 변경하면 간단히 해결할 수 있습니다.
으아악나에게도 효과가 있어...
제 프로젝트에 비슷한 쿼리가 많아서 이 방법을 사용했는데, 그냥 sql 모드를 only_full_group_by로 변경했습니다.
또는 단순히 GROUP BY 절의 SELECT 문으로 지정된 모든 열을 포함합니다. sql_mode는 활성화된 상태로 남아 있을 수 있습니다.
감사합니다... :-)
업데이트 날짜: 2023년 7월 14일
SQL 스키마를 변경하는 것이 해결 방법 중 하나이지만 구조화된 쿼리 언어의 모범 사례는 모든 (SELECT *...) 열을 선택하지 않고 대신 @Tim Biegeleisen이 아래에서 수행하는 것처럼 그룹화된 열에 집계 함수를 사용하는 것입니다. 답변에서 언급됨 https://stackoverflow.com/a/41887524/3602846