"SELECT 문의 집계되지 않은 열은 GROUP BY 절에 나타나지 않으며 sql_mode=only_full_group_by와 호환되지 않습니다."
P粉034571623
2023-08-20 13:44:52
<p>내 Windows PC에서 WAMP 서버와 함께 MySQL 5.7.13을 사용하고 있습니다</p>
<p>이 쿼리를 실행할 때 문제가 발생합니다</p>
<pre class="brush:php;toolbar:false;">SELECT *
`tbl_customer_pod_uploads`에서
여기서 `load_id` = '78' AND
`상태` = '활성'
GROUP BY `proof_type`</pre>
<p>항상 이런 오류가 발생합니다</p>
<인용문>
SELECT 목록의 표현식 #1은 GROUP BY 절에 없으며 집계되지 않은 열 'returntr_prod.tbl_customer_pod_uploads.id'를 포함합니다. 이 열은 GROUP BY 절의 열에 대한 기능적 종속성이 없습니다. sql_mode=only_full_group_by는 호환되지 않습니다</p>
</인용문>
<p>가장 좋은 해결책을 알려주세요. </p>
<p>나에게 필요한 결과는 다음과 같습니다</p>
<pre class="brush:php;toolbar:false;">+----+---------+---------+--------- ---------------+------------+---+------- --- ----+---------------+------------+---------+----- --- -------------+---------+
| id | load_id | langitude | 파일명 |
+------+---------+---------+---------+---------+--- ------+---+---------------+--------- ------- ---+---+---------+------------- -------+--- ----+
1 | 1 | 78 | 1 | 2017-01-27 11:30:14 |
+------+---------+---------+---------+---------+--- ------+---+---------------+--------- ------- ---+---+---------+------------- -------+--- -----+</pre>
<p><br /></p>
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: 모드
phpMyAdmin을 사용하는 경우 아래 스크린샷에 따라ONLY_FULL_GROUP_BY
sql_mode
설정을 변경하세요.sql 모드
변수를 편집하고 값에서text
sql 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
중요 팁
을 사용하여 변경한 사항은 영구적인 설정이 아니며 재부팅할 때마다 복원됩니다.
따라서 MySQL을 다시 시작해도 변경 사항이 적용되도록 구성 파일(예:点(1)或点(2)
파일)에서 이를 설정해야 합니다.
[mysqld]
部分的/etc/mysql/my.cnf
프로필:
/etc/mysql/my.cnf
변수 이름:
sql_mode
或sql-mode
또는sql-mode
값에서
단어를 제거하고 파일을 저장하세요.ONLY_FULL_GROUP_BY
참고
변수가 구성 파일에 없으면 파일 끝에 다음 2줄을 삽입하세요🎜 으아악sql_mode
:이 문제는 다음 명령을 사용하여 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