#1055 - SELECT 목록의 식이 GROUP BY 절에 없으며 집계되지 않은 열이 포함되어 있습니다. 이 열은 sql_mode=only_full_group_by와 호환되지 않습니다.
마이쿼리:
select libelle,credit_initial,disponible_v,sum(montant) as montant
FROM fiche,annee,type where type.id_type=annee.id_type and annee.id_annee=fiche.id_annee
and annee = year(current_timestamp) GROUP BY libelle order by libelle asc
- Mysql 5.7.9는 문제없이 쿼리를 실행하지만 mysql 5.7.12는 위의 오류를 표시합니다. 도와주시겠습니까?
동작시키는 데 어려움을 겪고 있습니다.테스트를 해봤는데 lamp server mysql 버전 5.12에서 동작하고 있습니다.
성공을 위한 단계:
sudo vim /etc/mysql/conf.d/mysql.cnf
파일 맨 아래로 스크롤 복사하여 붙여넣기
[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
파일 맨 아래까지
- 저장 및 종료 입력 모드
sudo service mysql restart
MySQL을 재시작합니다.
알았어!
이 방법은 효과가 있었습니다.
mysql -u root -p
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
첫 번째 단계에는 sudo가 필요할 수 있습니다.
sudo mysql -u root -p
의 집계 함수에 사용하지 않는 모든 열을 지정해야 합니다.GROUP BY
다음과 같은 절:
select libelle,credit_initial,disponible_v,sum(montant) as montant
FROM fiche,annee,type where type.id_type=annee.id_type and annee.id_annee=fiche.id_annee
and annee = year(current_timestamp) GROUP BY libelle,credit_initial,disponible_v order by libelle asc
그full_group_by
모드를 사용하면 기본적으로 보다 관용적인 SQL을 작성할 수 있습니다.원한다면 이 설정을 해제할 수 있습니다.MySQL 설명서에 나와 있는 다양한 방법이 있습니다.위에서 설명한 내용에 대한 MySQL의 정의는 다음과 같습니다.
MySQL 5.7.5 이상에서는 기능 의존성 검출을 구현합니다.SQL 모드가 ONLY_FULL_GROUP_BY인 경우(기본값), MySQL은 선택 목록, HAVING 조건 또는 ORDER BY 목록이 GROUP BY 절에 이름이 없거나 기능적으로 종속되지 않은 비집약 열을 참조하는 쿼리를 거부합니다(5.7.5 이전 버전에서는 MySQL은 FULL과 종속성만 검출하지 않습니다).UP_BY 는 디폴트로 유효하게 되어 있지 않습니다.5.7.5 이전 동작에 대한 설명은 MySQL 5.6 참조 매뉴얼을 참조하십시오.)
이 에러는, 버전 5.7.5보다 작기 때문에 표시됩니다.
sql_mode=only_full_group_by 명령을 사용하여 사용하지 않도록 설정할 수 있습니다. 터미널 또는 MySql IDE에서 시도할 수 있습니다.
mysql> 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';
mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
나는 이것을 시도해 보고 나를 위해 일했다.감사합니다:)
해결책 1: mysql 콘솔에서 ONLY_FULL_GROUP_BY만 삭제합니다.
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
여기서 더 읽을 수 있습니다.
해결책 2: phpmyadmin에서 ONLY_FULL_GROUP_BY만 삭제합니다.
Open phpmyadmin & select localhost
Click on menu Variables & scroll down for sql mode
Click on edit button to change the values & remove ONLY_FULL_GROUP_BY & click on save.
어떤 방법으로든 집계를 해야 합니다.NOT IN
그group by
절을 클릭합니다.
두 가지 방법이 있어요크레딧 추가_에 대한 초기 및 Disponable_vgroup by
또는
로 변경합니다.MAX( Credit_Initial ) as Credit_Initial, MAX( Disponible_v ) as Disponible_v
값이 일정하고 다른 영향이 없다는 것을 알고 있다면.
5.7.5의 기본 디폴트 구성 5.7.5 ONLY_FULL_GROUP_BY 그룹 내 모든 비집약 열을 다음과 같이 사용해야 합니다.
select libelle,credit_initial,disponible_v,sum(montant) as montant
FROM fiche,annee,type
where type.id_type=annee.id_type
and annee.id_annee=fiche.id_annee
and annee = year(current_timestamp)
GROUP BY libelle,credit_initial,disponible_v order by libelle asc
를 들어, 하지만 실제 가 있다고 합시다은 전이이다,,,,이다 in in in 。예를 들어, 로컬 호스트에서는 동작하지만 실제 모드에서는 동작하지 않는 쿼리가 있다고 합시다.것은,, 음음음음음 음음음음MySQL 5.7 and above
은 이 활동을 활성화하기로 결정했다.sql_mode=only_full_group_by
기본적으로는 엄밀한 모드이므로 집계되지 않은 필드를 선택할 수 없습니다.
다음은 쿼리입니다(로컬에서는 동작하지만 실제 가동 모드에서는 동작하지 않습니다).
SELECT post.*, YEAR(created_at) as year
FROM post
GROUP BY year
SELECT post.id, YEAR(created_at) as year // This will generate an error since there are many ids
FROM post
GROUP BY year
sql_mode=only_full_group_by
되어 를 실행해야 합니다.
SELECT @@sql_mode; //localhost
출력:IGNORE_SPACE, STRICT_TRANS, ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
다만, 실제 가동 모드나 에러가 발생하는 장소에서는, 액티브하게 할 필요가 있습니다.
SELECT @@sql_mode; //production
★★★★★★ ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO...
그 and......ONLY_FULL_GROUP_BY
우린 여기서 찾고 있어요
그렇지 않으면 phpMyAdmin을 사용하는 경우 ->로 이동합니다.Variables
sql_mode
위의 예를 들어 이에 맞게 수정해 보겠습니다.
SELECT MIN(post.id), YEAR(created_at) as year //Here we are solving the problem with MIN()
FROM post
GROUP BY year
MAX()
모든 ID를 얻으려면 다음 정보가 필요합니다.
SELECT GROUP_CONCAT(post.id SEPARATOR ','), YEAR(created_at) as year
FROM post
GROUP BY year
또는 새로 추가된 다른 기능:
SELECT ANY_VALUE(post.id), YEAR(created_at) as year
FROM post
GROUP BY year
⚠maria에 대한 ANY_VALUE가 존재하지 않습니다.DB
모든 필드를 원하는 경우 동일한 필드를 사용할 수 있습니다.
SELECT ANY_VALUE(post.id), ANY_VALUE(post.slug), ANY_VALUE(post.content) YEAR(created_at) as year
FROM post
GROUP BY year
❌ 를 sql_mode=only_full_group_by
하다,, 하다, 하다, 하다, 이런 돼요.
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
소설에 대해선 미안하고 도움이 됐으면 좋겠어.
「 set벨,, set」를 설정하기만 .false
내database.php
.
...
'mysql' => [
...
'strict' => false,
...
]
8.0+ 버전에서도 같은 현상이 발생합니다.디폴트로는 8.0+ 버전에서는 디폴트로 「이네이블」입니다.링크 공식 문서 참조입니다.
5.6+, 5.7+ 버전의 경우 속성 "ONLY_FULL_GROUP_BY"는 기본적으로 비활성화되어 있습니다.
비활성화하려면 @Miloud BAKTEE에서 권장하는 절차를 따릅니다.
또한 MySql 8+를 콘솔에서 사용하는 경우 다음 명령을 사용합니다.
MySql 콘솔 열기
mysql -u user_name -p
또한 글로벌 SQL 모드 설정
SET GLOBAL sql_mode='STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_ENGINE_SUBSTITUTION';
윈도우 하단 트레이로 이동하여 wamp 아이콘을 클릭하고 mysql-> my.ini를 클릭하면 옵션 ; sql-mode=" uncomment this make it to like sql-mode=" 가 되고 wamp가 재시작됩니다.
언급URL : https://stackoverflow.com/questions/37951742/1055-expression-of-select-list-is-not-in-group-by-clause-and-contains-nonaggr
'it-source' 카테고리의 다른 글
MariaDB 교착 상태 방지 (0) | 2022.12.09 |
---|---|
Maria를 사용하여 현지 시간 SQL 결과를 반환하는 방법DB (0) | 2022.12.09 |
Python에서 정렬된 배열의 인덱스를 가져오는 방법 (0) | 2022.12.09 |
참조 - 이 기호는 PHP에서 무엇을 의미합니까? (0) | 2022.12.09 |
python 스크립트의 실행을 프로그래밍 방식으로 중지하시겠습니까? (0) | 2022.12.09 |