mysql - 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 在版本之间是相同的)。
解决方案
推荐阅读
- node.js - Express 保留一个请求,直到最后一个请求完成
- jquery - 在进行 AJAX 发布之前如何使用 Google Recaptcha
- node.js - 定义 docker-compose 文件的 IP
- php - 如何通过将键与字符串进行比较以获取值来获取php关联数组中键的值?
- rxjs - 如何将 scala.concurrent.Future 转换为 RxPromise
- sql - 将“Patients”表的行中的不同值作为不同的条目插入“visits”表
- java - 解密结果不一致
- java - 在不使用 Log4J 的情况下测试由 Slf4j 创建的日志消息
- python - 我如何通过 Selenium 获得股票代码?
- regex - NGINX 有 2 个需要重写的条件