我的 SQL 语句在我的笔记本电脑的 MySQL(服务器版本:5.5.62-0ubuntu0.14.04.1 - (Ubuntu))上正确返回,但在我的服务器(服务器版本:5.7.26-0ubuntu0.16.04.1 - (Ubuntu))上正确返回返回错误。
SELECT *
FROM `orders`
WHERE `mail_sent`='No'
AND `datetime` < DATE_SUB(NOW(), INTERVAL 15 MINUTE)
GROUP BY `contact_id`
ORDER BY `datetime` ASC;
1055 - SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“shop.orders.id”;这与 sql_mode=only_full_group_by 不兼容
我认为这个问题是由于
strict mode
在您的 MySQL 版本中启用的。请禁用严格模式,然后重试。禁用关注如何在 localhost (xampp) 中打开/关闭 MySQL 严格模式?
STRICT_TRANS_TABLES负责设置 MySQL 严格模式。
要检查是否启用了严格模式,请运行以下 sql:
如果其中一个值是STRICT_TRANS_TABLES,则启用严格模式,否则不启用。就我而言,它给了
因此,在我的情况下启用了严格模式,因为其中一个值是 STRICT_TRANS_TABLES。
要禁用严格模式,请运行以下 sql:
[或除 STRICT_TRANS_TABLES 之外的任何模式。例如:设置全局 sql_mode='NO_ENGINE_SUBSTITUTION';]
要再次启用严格模式,请运行以下 sql:
如果您不禁用什么,
strict_mode
那么您必须更改您的 sql 查询以遵循 sqlstandard
。像这样..
为您查询..
让我知道这是否有帮助。
另一个快速解决方法是使用
ANY_VALUE(contact_id) as contact_id
而不是仅contact_id
在您的SELECT
.例如:
请注意,您分组依据的字段(例如
contact_id
)必须用 选择ANY_VALUE(contact_id) AS contact_id
。值得一读:https ://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
将其余列(除了
contact_id
)放在聚合函数中。以我有限的经验,MySQL 在处理聚合函数之外的非分组列的方式上并不完全一致。最好的情况,它不是确定性的。