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