极端sql_mode = only_full_group_by

时间:2019-11-27 04:42:45

标签: mysql

SELECT DISTINCT
    `A/C#` AS `A/C#`,
    `MyRef` AS `MyRef`,
    DATEDIFF('2017-06-30', `Date`) AS `Days`,
    `Dr` - `Cr` AS `Balance`
FROM
    `BERNIE`.`answer`
GROUP BY
    `A/C#`,
    `MyRef`
ORDER BY
    BINARY `A/C#`,
    BINARY `MyRef`,
    `Days`,
    `Balance`

SELECT列表的表达式#3不在GROUP BY子句中,并且包含未聚合的列'bernie.answer.Date',该列在功能上不依赖于GROUP BY子句中的列;这与sql_mode = only_full_group_by

不兼容

通过在GROUP BY中包含DateDrCr可以消除错误。

我得到了GROUP BY的东西(也许是..),但这看起来很极端吗?

更新: 将已计算字段(DaysBalance的别名添加到GROUP BY也会消除该错误。现在我更困惑了。

2 个答案:

答案 0 :(得分:1)

完全删除GROUP BY。在这种情况下不合适,因为没有聚合。

答案 1 :(得分:0)

您可以通过执行以下操作来尝试禁用only_full_group_by设置:

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

OR

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