Error Code: 1055 incompatible with sql_mode=only_full_group_by

后端 未结 6 1306
予麋鹿
予麋鹿 2020-12-01 05:49

I have been having issues switching to an offline version of the Lahman SQL baseball database. I was using a terminal embed into an EDX course. This command runs fine on the

相关标签:
6条回答
  • 2020-12-01 05:59

    The accepted solution above didn't work for me on version 5.7.9, for osx10.9 (x86_64).

    Then the following worked -

    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';
    
    0 讨论(0)
  • 2020-12-01 06:01
    SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
    
    ** your query **
    

    This will resolve your problem.

    0 讨论(0)
  • 2020-12-01 06:05

    If you do as the picked answer, the @sql_mode may be like this—

    ',STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'.
    

    there's a comma in front of the 'STRICT_TRANS_TABLES' string.

    Just execute 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';
    

    it works.

    Also, you can try following exp,

    SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY,','');
    

    I didn't test it, but I guess it may works.

    0 讨论(0)
  • 2020-12-01 06:06

    For other use cases: You don't necessarily have to disable ONLY_FULL_GROUP_BY Given a case like this, According to mysql docs, "This query is invalid if name is not a primary key of t or a unique NOT NULL column. In this case, no functional dependency can be inferred and an error occurs:"

    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
    

    Instead you can use this ANY_VALUE('my_column_name') my_column_name Quoting the mysql docs, "In this case, MySQL ignores the nondeterminism of address values within each name group and accepts the query." Use ANY_VALUE() to refer to address:

    SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;
    
    0 讨论(0)
  • 2020-12-01 06:16

    In 5.7 the sqlmode is set by default to:

     ONLY_FULL_GROUP_BY,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
    

    To remove the clause ONLY_FULL_GROUP_BY you can do this:

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

    This supposed you need to make that GROUP BY with non aggregated columns.

    Regards

    0 讨论(0)
  • 2020-12-01 06:26

    You can set the variables in 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';
    

    Remember NO_AUTO_CREATE_USER will not work with mysql 8.

    If that doesn't work just do:

    mysql > set sql_mode = ''
    
    0 讨论(0)
提交回复
热议问题