>  Q&A  >  본문

SELECT 문의 열이 GROUP BY 절에 없고 집계되지 않은 열을 포함하고 있습니다....sql_mode=only_full_group_by와 호환되지 않습니다.

<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>
P粉521748211P粉521748211424일 전594

모든 응답(2)나는 대답할 것이다

  • P粉300541798

    P粉3005417982023-08-22 11:53:58

    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

    phpMyAdmin을 사용하는 경우 아래 스크린샷에 따라

    sql_mode 설정을 변경하세요.

    sql 모드 변수를 편집하고 값에서

    textsql mode变量并从值中删除ONLY_FULL_GROUP_BY를 제거합니다.

    또는

    (2) SQL/명령 프롬프트

    다음 명령을 실행하여 비활성화합니다: mode. ONLY_FULL_GROUP_BY 으아아아

    또는

    (3) SELECT *을 사용하지 마세요.

    모드를 비활성화하지 말고 대신 ONLY_FULL_GROUP_BY

    등) 열 SELECT查询中使用相关列。相关列指的是在group by子句中出现的列或带有聚合函数(MAXMINSUMCOUNT


    중요 지침

    를 사용하여 변경한 내용은 영구적으로 설정되지 않으며 재부팅할 때마다 복원됩니다. point(1)或point(2)

    따라서 MySQL을 다시 시작한 후에도 변경 사항이 유지되도록 구성 파일(예:

    )에서 이를 설정해야 합니다. [mysqld]部分的/etc/mysql/my.cnf

    프로필: /etc/mysql/my.cnf

    변수 이름: sql_mode 或者 sql-mode 또는

    sql-mode

    값에서 단어를 제거ONLY_FULL_GROUP_BY

    하고 파일을 저장하세요.

    참고sql_mode:

    변수가 구성 파일에 없으면 파일 끝에 다음 2줄을 삽입하세요🎜 으아아아

    회신하다
    0
  • P粉278379495

    P粉2783794952023-08-22 11:13:03

    이것

    이 문제는 다음 명령을 사용하여 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

    에 대한 답변

    회신하다
    0
  • 취소회신하다