MySQL 5.7 - 聚合函数在子查询中断引用列别名

时间:2018-05-22 15:51:53

标签: mysql subquery aggregate alias 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 - 未知列' id2'在' where子句' )。如果我不为列添加别名,那么它可以工作:

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在版本之间是相同的)。

0 个答案:

没有答案