SELECT 문의 열이 GROUP BY 절에 없고 집계되지 않은 열을 포함하고 있습니다....sql_mode=only_full_group_by와 호환되지 않습니다.
P粉521748211
2023-08-21 13:21:31
<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>
<인용문>
<p> SELECT 목록의 표현식 #1은 GROUP BY 절에 없으며 GROUP BY 절의 열에 대한 기능적 종속성이 없는 비집계 열 'returntr_prod.tbl_customer_pod_uploads.id'를 포함합니다. sql_mode = only_full_group_by는 호환되지 않습니다</p>
</인용문>
<p>가장 좋은 해결책을 알려주세요. </p>
<p>나에게 필요한 결과는 다음과 같습니다</p>
<pre class="brush:php;toolbar:false;">+----+---------+---------+--------- ---------------+------------+---+------- --- ----+---------------+------------+---------+----- --- -------------+---------+
| id | load_id | 문서_유형 |
+----+---------+---------+---------+---------+--- ------+---+---------------+--------- ------- ---+---+---------+------------- -------+--- ----+
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을 다시 시작한 후에도 변경 사항이 유지되도록 구성 파일(예:point(1)或point(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
에 대한 답변