我用WAMP服务器在我的windows PC上使用MySQL 5.7.13

我的问题是在执行这个查询时

SELECT *
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND
      `status` = 'Active'
GROUP BY `proof_type`

我总是得到这样的错误

SELECT列表中的表达式#1不在GROUP BY子句中,包含未聚合的列returntr_prod.tbl_customer_pod_uploads。id',它不依赖于GROUP BY子句中的列;这与sql_mode=only_full_group_by不兼容

你能告诉我最好的解决办法吗?

我需要这样的结果

+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+
| id | user_id | load_id | bill_id | latitude | langitude | proof_type | document_type | file_name    | is_private | status | createdon           | updatedon           |
+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+
|  1 |       1 | 78      | 1       | 21.1212  | 21.5454   |          1 |             1 | id_Card.docx |          0 | Active | 2017-01-27 11:30:11 | 2017-01-27 11:30:14 |
+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+

当前回答

如果你不想禁用ONLY_FULL_GROUP_BY模式,你只需要在GROUP BY子句中指定你想选择的每一列。

不要使用通配符(*),并确保您的列与您的需求相关

其他回答

步骤1。检查sql模式:

SELECT @@GLOBAL.sql_mode;

步骤2。在/etc/mysql/conf目录下创建一个新的配置文件。d /目录:

sudo nano /etc/mysql/conf.d/disable_strict_mode.cnf

在编辑器中输入以下文本:

[mysqld]

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

步骤3。重新启动MySQL:

sudo service mysql restart

步骤4。确认更改:

SELECT @@GLOBAL.sql_mode;

有时候你只需要检查你的查询是否有正确的Order和Order的方式。

GROUP BY pp.id_product
FIELD(pp.id_product, 1600, 1870, 2300 );

除非将排序方式(DESC或ASC)添加到查询中,否则该命令不会运行

GROUP BY pp.id_product
FIELD(pp.id_product, 1600, 1870, 2300 ) DESC;

这将在不破坏服务器的会话和全局设置的情况下完成任务。

在my.ini中,这样写:

[mysqld]
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

取决于你的版本。或者:

[mysqld]
sql_mode = ""

或者简单地删除这个:ONLY_FULL_GROUP_BY

当MySQL的only_full_group_by模式被打开时,这意味着严格的ANSI SQL规则将在使用GROUP BY时应用。对于你的查询,这意味着如果你对proof_type列进行GROUP BY,那么你只能选择两件事:

proof_type列,或者 任何其他列的聚合

通过其他列的“聚合”,我指的是对另一列使用诸如MIN()、MAX()或AVG()之类的聚合函数。所以在你的情况下,下面的查询是有效的:

SELECT proof_type,
       MAX(id) AS max_id,
       MAX(some_col),
       MIN(some_other_col)
FROM tbl_customer_pod_uploads
WHERE load_id = '78' AND
      status = 'Active'
GROUP BY proof_type

我在SO上看到的绝大多数MySQL GROUP BY问题都关闭了严格模式,所以查询正在运行,但结果不正确。在您的情况下,查询根本不会运行,迫使您考虑真正想要做什么。

注意:ANSI SQL扩展了GROUP BY中允许选择的内容,也包括了功能上依赖于所选列的列。函数依赖的一个例子是按表中的主键列分组。由于保证主键对于每条记录都是唯一的,因此任何其他列的值也将确定。MySQL是允许这样做的数据库之一(SQL Server和Oracle不AFAIK)。

登录到phpMyAdmin 导航到:Server: localhost:3306并执行 不选择任何数据库 点击顶部菜单中的变量 搜索“sql mode”并将相应的值编辑为:NO_ENGINE_SUBSTITUTION

这是所有。

我在我的Ec2中这样做了,它很有魅力。