首页 > 解决方案 > MySQL 5.7 - 聚合函数在子查询中中断引用列别名

问题描述

我已经从 MySQL 5.5 升级到 5.7,并且我的查询不再有效。这是一个很大的问题,但我已将其简化为 - 查询本身并没有真正意义,但演示了:

SELECT
id AS id2,
name,
SUM(id * (SELECT 10 FROM event WHERE event.product_id=id2 LIMIT 1))
FROM product
GROUP BY product.category_id

这在 5.5 中有效,但在 5.7 中无效(我得到[Err] 1054 - Unknown column 'id2' in 'where Clause')。如果我不对列起别名,它会起作用:

SELECT
id,
name,
SUM(id * (SELECT 10 FROM event WHERE event.product_id=product.id LIMIT 1))
FROM product
GROUP BY product.category_id

但在实际查询中,这是一个相当复杂的表达式,所以我想给它起别名。如果我排除聚合函数,它也适用于 5.7:

SELECT
id,
name,
id * (SELECT 10 FROM event WHERE event.product_id=product.id LIMIT 1)
FROM product
GROUP BY product.category_id

我在文档中找不到任何解释这种差异的东西。我可以重写查询,但它会更加混乱,所以我试图找出一种方法,如果我可以重新启用这种行为(注意 SQL_MODE 在版本之间是相同的)。

标签: mysqlsubqueryaggregatealiasmysql-5.7

解决方案


推荐阅读