聚合函数在子查询中引用列别名

eoigrqb6  于 2021-06-20  发布在  Mysql
关注(0)|答案(0)|浏览(314)

我已经从MySQL5.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-“where子句”中的未知列“id2”)。如果我不为列设置别名,它就可以工作:

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\u模式是相同的)。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题