代码之家  ›  专栏  ›  技术社区  ›  clarkk

升级到mysql 5.7.21后:与sql\u mode=only\u full\u group\u by不兼容

  •  -1
  • clarkk  · 技术社区  · 7 年前

    升级到mysql后 5.7.21 从…起 5.7.20 我出错了

    SELECT ac.vatcode_id,ac.vatcode_type,v.name vatcode_name,v.txt vatcode_txt
    FROM `accounting` ac
    LEFT JOIN `vatcode` v ON v.id=ac.vatcode_id
    WHERE ac.account_id=300479 && ac.vatcode_id>=0 && ac.time BETWEEN 1514764800 AND 1546214400 && ac.block_id=4431
    GROUP BY ac.vatcode_id
    

    #1055-SELECT列表的表达式#2不在GROUP BY子句中,并且包含未聚合的列“dynaccount”。ac.vatcode\u类型 功能上不依赖于GROUP BY子句中的列;这是 与sql\u mode=only\u full\u group\u by不兼容

    # show variables;
    sql_mode
    STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Thorsten Kettner    7 年前

    您的查询无效。您告诉DBMS:“per ac.vatcode_id 给我 ac.vatcode_type “。DBMS告诉您 这个 ac.vatcode\U类型 ac.vatcode\U id ;可以有多个不同的。那你想要哪一个?最大值?然后做这个 MAX(ac.vatcode_type) 。最小值?那就去吧 MIN(ac.vatcode_type) 。你不在乎哪个?然后做这个 ANY_VALUE(ac.vatcode_type)

    您的新MySQL版本更加严格,希望您编写符合SQL标准的有效查询。这是一件好事。