1055 - SELECT 列表的表达式 #1 不在 GROUP BY 子句中并且包含非聚合列

anj*_*esh 8 mysql

我的 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;
Run Code Online (Sandbox Code Playgroud)

1055 - SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含非聚合列“shop.orders.id”,该列在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容

小智 8

我认为这个问题是由于strict mode在您的 MySQL 版本中启用了。请禁用严格模式,然后重试。

禁用遵循如何在 localhost (xampp) 中打开/关闭 MySQL 严格模式?

STRICT_TRANS_TABLES负责设置 MySQL 严格模式。

要检查是否启用了严格模式,请运行以下 sql:

SHOW VARIABLES LIKE 'sql_mode';
Run Code Online (Sandbox Code Playgroud)

如果值之一是STRICT_TRANS_TABLES,则启用严格模式,否则不启用。就我而言,它给了

+--------------+------------------------------------------+ 
|Variable_name |Value                                     |
+--------------+------------------------------------------+
|sql_mode      |STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION|
+--------------+------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

因此,在我的情况下启用了严格模式,因为其中一个值是 STRICT_TRANS_TABLES。

要禁用严格模式,请运行以下 sql:

set global sql_mode='';
Run Code Online (Sandbox Code Playgroud)

[或除 STRICT_TRANS_TABLES 之外的任何模式。例如:设置全局 sql_mode='NO_ENGINE_SUBSTITUTION';]

要再次启用严格模式,请运行以下 sql:

set global sql_mode='STRICT_TRANS_TABLES';
Run Code Online (Sandbox Code Playgroud)

如果您不想禁用什么,strict_mode那么您必须更改您的 sql 查询以遵循 sql standard

像这样..

SELECT
   aggregated_column,
   aggregated_column,
   aggregation_function(column),
   aggregation_function(column),
   aggregation_function(column)
FROM
  TABLE
WHERE [CLAUSE]
GROUP BY [GROUP BY FIELD]
WHILE [CLAUSE]
ORDER BY 
Run Code Online (Sandbox Code Playgroud)

对于您的查询..

SELECT 
  contact_id,
  min(mail_sent),
  min(datetime),
  max(datetime),
FROM `orders` 
WHERE `mail_sent`='No' 
  AND `datetime` < DATE_SUB(NOW(), INTERVAL 15 MINUTE) 
GROUP BY `contact_id` 
ORDER BY `datetime` ASC;
Run Code Online (Sandbox Code Playgroud)

如果这有帮助,请告诉我。

  • 请编辑**“请禁用严格模式”** 与**“如果您希望允许此无意义查询并可能返回不一致或不存在的结果,请禁用严格模式。”** (5认同)