查询不再适用于 MySQL 5

Posted

技术标签:

【中文标题】查询不再适用于 MySQL 5【英文标题】:Query no longer works in MySQL 5 【发布时间】:2012-12-02 21:24:27 【问题描述】:
SELECT xp.productid, xp.product, xc.classid, xiW.date, xco.optionid, xco.option_name, xiW.id, xiW.image_path, xiW.path_on_server
    FROM xcart_products xp
    INNER JOIN xcart_variants xv ON xp.productid = xv.productid
    INNER JOIN xcart_variant_items xvi ON xv.variantid = xvi.variantid
    INNER JOIN xcart_class_options xco ON xvi.optionid = xco.optionid
    INNER JOIN xcart_classes xc ON xco.classid = xc.classid AND xc.class = 'COLOR'
    LEFT JOIN xcart_images_W xiW ON xiW.id = xvi.variantid
    GROUP BY xco.optionid
    ORDER by xp.product ASC

我收到错误消息:xp.productid 不在 GROUP BY 中

然后我添加它并得到 xp.product 不在 GROUP BY 中

我添加它并得到 xc.classid 不在 GROUP BY 中

我添加了它并一路向下 -

SELECT xp.productid, xp.product, xc.classid, xiW.date, xco.optionid, xco.option_name, xiW.id, xiW.image_path, xiW.path_on_server
    FROM xcart_products xp
    INNER JOIN xcart_variants xv ON xp.productid = xv.productid
    INNER JOIN xcart_variant_items xvi ON xv.variantid = xvi.variantid
    INNER JOIN xcart_class_options xco ON xvi.optionid = xco.optionid
    INNER JOIN xcart_classes xc ON xco.classid = xc.classid AND xc.class = 'COLOR'
    LEFT JOIN xcart_images_W xiW ON xiW.id = xvi.variantid
    GROUP BY xco.optionid, xp.productid, xp.product, xc.classid, xiW.date, xco.option_name, xiW.id, xiW.image_path, xiW.path_on_server
    ORDER by xp.product ASC

这不可能是正确的吧?它确实可以运行,但我认为 GROUP BY 在 mysql 5 中的处理方式与 MySQL 4 中的处理方式略有不同,或者我的查询在 4 中几乎没有功能?

【问题讨论】:

SQL 标准要求所有非聚合字段都包含在GROUP BY 子句中。也许 MySQL 最终决定做对了? 如果你这样分组,你会大大提高你的结果,并且不知道到底发生了什么。如果没有聚合,为什么要分组? 【参考方案1】:

显然你启用了ONLY_FULL_GROUP_BY 模式

只需禁用它,您就可以再次对GROUP_BY 这个伟大的 mysql 扩展感到满意

【讨论】:

以上是关于查询不再适用于 MySQL 5的主要内容,如果未能解决你的问题,请参考以下文章

23.Mysql应用优化

MySQL查询缓存

这个 mySQL “空间”查询是不是也适用于 SQL Server 2008?

MySQL 5.7 二进制安装

MySQL 查询适用于 SELECT 但不适用于 UPDATE 语句

为啥 mysql 中的这个查询适用于该表,但不适用于该表的视图?