执行查询时,我在 wampserver MySql 5.7.14 中遇到与 sql_mode=only_full_group_by 相关的错误
Posted
技术标签:
【中文标题】执行查询时,我在 wampserver MySql 5.7.14 中遇到与 sql_mode=only_full_group_by 相关的错误【英文标题】:I am getting an error in wampserver MySql 5.7.14 related to sql_mode=only_full_group_by when executing a query 【发布时间】:2017-02-26 12:51:23 【问题描述】:我已更新我的 wampserver (X64)3.0.6 并使用 php 为我正在开发的 Web 应用程序安装 mysql 5.7.14。在旧版本的 MySql 5.6.17 中运行时,它工作正常。但自从升级到 5.7.14 后,我收到了这个错误:
SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含 非聚合列 'pharmezy-2.p.idproduct' 不是 功能上依赖于 GROUP BY 子句中的列;这是 与 sql_mode=only_full_group_by 不兼容
我的查询是:
SELECT p.idproduct, p.idproduct, p.product_name, pi.image_url, u.u_company,
p.product_rating FROM product p join product_image pi on p.idproduct=pi.idproduct
join users u on p.idusers = u.idusers where p.idprocess=1 and p.product_status=1
group by u.u_company
谢谢
【问题讨论】:
I am getting an error in MySql related to only_full_group_by when executing a query的可能重复 如果您仅按u.u_company
分组,则必须对 select 语句中的所有其他列使用聚合函数。如果您还想按其他列分组,那么您还需要将所有其他列按条件分组。这可能会对您有所帮助:w3schools.com/sql/sql_groupby.asp
这次我使用的是 u.u_company,aggregate_function(u.u_company) 但 FUNCTION pharmezy-2.aggregate_function 不存在
一个聚合函数例如是MAX()
、MIN()
、AVG()
、COUNT()
等。提供的链接中有示例。
【参考方案1】:
因为你似乎觉得我写这个答案有问题。
您需要对要聚合的列使用 Aggregate-Functions,例如 MAX()
或 COUNT()
。或者你写下你想要分组的所有列。就像你对u.u_company
所做的那样。这也可以通过SELECT DISTINCT
来完成。
例如使用 Aggregate-Function MAX()
并且仅按 u.u_company
分组:
SELECT MAX(p.idproduct) AS MAX_p_idproduct ,
MAX(p.product_name) AS MAX_p_product_name ,
MAX(pi.image_url) AS MAX_pi_image_url ,
u.u_company ,
MAX(p.product_rating) AS MAX_p_product_rating
FROM product p
JOIN product_image pi ON p.idproduct = pi.idproduct
JOIN users u ON p.idusers = u.idusers
WHERE p.idprocess = 1
AND p.product_status = 1
GROUP BY u.u_company
不使用聚合函数,而是按所有列分组:
SELECT p.idproduct ,
p.product_name ,
pi.image_url ,
u.u_company ,
p.product_rating
FROM product p
JOIN product_image pi ON p.idproduct = pi.idproduct
JOIN users u ON p.idusers = u.idusers
WHERE p.idprocess = 1
AND p.product_status = 1
GROUP BY u.u_company ,
p.idproduct ,
p.product_name ,
pi.image_url ,
u.u_company ,
p.product_rating
与使用DISTINCT
而不是GROUP BY
的上一个查询相同但不同:
SELECT DISTINCT p.idproduct ,
p.product_name ,
pi.image_url ,
u.u_company ,
p.product_rating
FROM product p
JOIN product_image pi ON p.idproduct = pi.idproduct
JOIN users u ON p.idusers = u.idusers
WHERE p.idprocess = 1
AND p.product_status = 1
也可以使用聚合函数(与第一个查询相同):
SELECT DISTINCT MAX(p.idproduct) AS MAX_p_idproduct ,
MAX(p.product_name) AS MAX_p_product_name ,
MAX(pi.image_url) AS MAX_pi_image_url ,
u.u_company ,
MAX(p.product_rating) AS MAX_p_product_rating
FROM product p
JOIN product_image pi ON p.idproduct = pi.idproduct
JOIN users u ON p.idusers = u.idusers
WHERE p.idprocess = 1
AND p.product_status = 1
但在所有情况下,您都需要知道自己要做什么。您只想按u.u_company
分组还是按更多列分组。但无论哪种方式,所有列都参与分组。它们需要通过 Aggregate-Funtion 在组中或由 Aggregate-Funtion 聚合!
【讨论】:
以上是关于执行查询时,我在 wampserver MySql 5.7.14 中遇到与 sql_mode=only_full_group_by 相关的错误的主要内容,如果未能解决你的问题,请参考以下文章