[SQL] 오류 코드 :와 1055 호환되지 않는 sql_mode = ONLY_FULL_GROUP_BY
SQL오류 코드 :와 1055 호환되지 않는 sql_mode = ONLY_FULL_GROUP_BY
나는 Lahman SQL 야구 데이터베이스의 오프라인 버전으로 전환하는 데 문제가있다. 나는 EDX 코스로 터미널 삽입을 사용했다. 이 명령은 웹 터미널에 벌금을 실행합니다 :
SELECT concat(m.nameFirst,concat(" ",m.nameLast)) as Player,
p.IPOuts/3 as IP,
p.W,p.L,p.H,p.BB,p.ER,p.SV,p.SO as K,
p.IPOuts+p.W*5+p.SV+p.SO-p.BB-p.L-p.H as PTS,
p.yearID as Year
FROM Pitching p
Inner Join Master m
ON p.playerID=m.playerID
WHERE p.yearID=2014 AND p.IPOuts>=50
GROUP BY m.playerID
ORDER BY PTS DESC;
SQL 5.5.46 실행,하지만 난 5.7.10 실행 내 오프라인 버전을 사용할 때 다음과 같은 오류 코드를 얻을이다 :
나는 사람들의 문제에 대한 해결책을 많이 읽어 봤는데,하지만이 경우 도움이되지 않았다. 나는이 중 슈퍼 분명하다 생각이나 어쩌면 내가 코딩에서 확인을 받고 있어요 그래서 전에 일어난 적이 없어요. 어쨌든, 사람이이 문제를 해결하는 방법을 알고?
해결법
-
==============================
1.5.7에서 sqlmode은 기본적으로 다음으로 설정됩니다
5.7에서 sqlmode은 기본적으로 다음으로 설정됩니다
ONLY_FULL_GROUP_BY,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
이 작업을 수행 할 수 ONLY_FULL_GROUP_BY 절을 제거하려면 :
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
이것은 당신이 비 집계 열이 GROUP BY 것을해야하는데.
문안 인사
-
==============================
2.위의 허용 솔루션은 osx10.9 (x86_64에) 들어, 버전 5.7.9에 나를 위해 작동하지 않았다.
위의 허용 솔루션은 osx10.9 (x86_64에) 들어, 버전 5.7.9에 나를 위해 작동하지 않았다.
다음은 일 -
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';
-
==============================
3.다른 사용 사례를 들어 : 당신은 반드시 해제 ONLY_FULL_GROUP_BY 필요 없어 이런 경우 감안할 때, MySQL의 문서에 따르면, ". 이름은 t 또는 고유 NOT NULL 컬럼의 기본 키가 아닌 경우이 쿼리는이 경우, 함수 적 종속성을 유추 할 수 없습니다 무효이며 오류가 발생합니다"
다른 사용 사례를 들어 : 당신은 반드시 해제 ONLY_FULL_GROUP_BY 필요 없어 이런 경우 감안할 때, MySQL의 문서에 따르면, ". 이름은 t 또는 고유 NOT NULL 컬럼의 기본 키가 아닌 경우이 쿼리는이 경우, 함수 적 종속성을 유추 할 수 없습니다 무효이며 오류가 발생합니다"
SELECT name, address, MAX(age) FROM t GROUP BY name; ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mydb.t.address' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
대신이 ANY_VALUE ( 'my_column_name') my_column_name을 사용할 수 있습니다 MySQL의 문서, 인용 "이 경우, MySQL은 각각의 이름 그룹 내 주소 값의 비결정론을 무시하고 쿼리를 받아들입니다." 사용 ANY_VALUE는 () 주소를 참조합니다 :
SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;
-
==============================
4.
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); ** your query **
이 문제를 해결합니다.
-
==============================
5.당신이 고른 응답으로 할 경우, @sql_mode는 this-처럼 될 수있다
당신이 고른 응답으로 할 경우, @sql_mode는 this-처럼 될 수있다
',STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'.
'STRICT_TRANS_TABLES'문자열 앞에 쉼표가있다.
그냥 this- 실행
set @@sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
효과가있다.
또한, 애 썼는데 다음 시도 할 수 있습니다,
SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY,','');
나는 그것을 테스트하지 못했지만, 나는 그것이 작품을 할 수있다 같아요.
-
==============================
6.당신은 MySQL의에서 변수를 설정할 수 있습니다 :
당신은 MySQL의에서 변수를 설정할 수 있습니다 :
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';
NO_AUTO_CREATE_USER는 MySQL의 8 작동하지 않습니다 기억하십시오.
그래도 문제가 해결되지 않으면 바로 수행
mysql > set sql_mode = ''
from https://stackoverflow.com/questions/36207042/error-code-1055-incompatible-with-sql-mode-only-full-group-by by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 가입 INNER와 DELETE SQL은 (0) | 2020.06.05 |
---|---|
[SQL] 3 개 테이블과 조인 Laravel (0) | 2020.06.05 |
[SQL] CSV에서 SQL 대량 가져 오기 (0) | 2020.06.05 |
[SQL] 행에서 최대 값을 얻기과 다른 테이블에 합류 (0) | 2020.06.05 |
[SQL] 어떻게 SQL Server 2005의 테이블에 NTEXT 필드에 유니 코드 / 비 ASCII 문자를 찾을 수 있습니까? (0) | 2020.06.05 |