我用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 |
+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+

当前回答

在运行查询之前运行下面的查询

SET SQL_MODE = '';

其他回答

从它的外观来看,我认为分组多列/字段不会损害你的结果。你为什么不试试这样加入这个群呢:

GROUP BY `proof_type`, `id`

这将首先按proof_type进行分组,然后再按id进行分组。我希望这不会改变结果。在某些/大多数情况下,按多列分组会给出错误的结果。

如果你在Mac上使用MAMP,当你重新启动MAMP时,对MySQL变量的任何更改都将被擦除。要确保更改是永久性的,请执行以下操作:

停止正在运行的MAMP服务器。

使用文本编辑器创建一个名为my.cnf的文件,并将其保存到/Applications/MAMP/conf文件夹中。将文件放在文件夹的根目录下(这看起来有点奇怪,因为它包含了大量的apache文件夹,但这是可以的)。在文件中添加如下代码行:

[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

保存文件并关闭编辑器。 启动MAMP服务器。

这将使改变成为永久性的。

在MySql引擎中有一个系统变量ONLY_FULL_GROUP_BY。

从Mysql版本5.7.5:只有_full_group_by SQL模式默认启用

5.7.5版本之前:默认不启用ONLY_FULL_GROUP_BY。

如果启用了ONLY_FULL_GROUP_BY SQL模式(这是5.7.5版本的默认设置),MySQL将拒绝select列表、HAVING条件或ORDER by列表引用非聚合列的查询,这些列既不在GROUP by子句中命名,也在功能上依赖于它们。

为了解决问题,可以使用以下3种解决方案中的任意一种

(1) PHPMyAdmin

不启用:只有full_group_by模式

如果您正在使用phpMyAdmin,则更改sql_mode设置,如下面的截图所示。

编辑sql模式变量并从值中删除ONLY_FULL_GROUP_BY文本

OR

(2) SQL/命令提示

禁用:只使用“full_group_by”模式。

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

OR

不要使用SELECT *

不要禁用ONLY_FULL_GROUP_BY模式,但是

在SELECT查询中使用相关列。相关的是指列,它们要么是按子句分组,要么是带有聚合函数的列(MAX, MIN, SUM, COUNT等)


重要提示

使用点(1)或点(2)所做的更改不会将其设置为永久,并且在每次重新启动后将恢复。

所以你应该在你的配置文件中设置这个(例如/etc/mysql/my.cnf在[mysqld]部分),这样更改在MySQL重启后仍然有效:

配置文件:/etc/mysql/my.cnf

变量名:sql_mode或sql-mode

从值中删除单词ONLY_FULL_GROUP_BY并保存文件。

注意:如果在配置文件中没有找到sql_mode变量,请在文件末尾插入以下2行

[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

登录到phpMyAdmin 导航到:服务器:http://localhost/phpmyadmin,不要选择任何数据库 点击SQL从顶部菜单和虫害下面的代码运行SQL查询/查询服务器 SET GLOBAL sql_mode=(SELECT (@@sql_mode,'ONLY_FULL_GROUP_BY', ")); 比照链接

在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