복붙노트

[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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    4.

    SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
    
    ** your query **
    

    이 문제를 해결합니다.

  5. ==============================

    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. ==============================

    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 = ''
    
  7. from https://stackoverflow.com/questions/36207042/error-code-1055-incompatible-with-sql-mode-only-full-group-by by cc-by-sa and MIT license