【发布时间】:2015-12-06 12:03:10
【问题描述】:
我对子查询中的别名有疑问。
我有一个问题:
SELECT
`id` as `t`,
`title`,
`once`,
(select count(`id`) from `orders_files` where `order_id`='116815' and `type`=`t` and (`version`='41924') ) as `count`,
(select count(`id`) from `orders_files` where `order_id`='116815' and `type`=`t` ) as `count_in_order`
FROM
`orders_filetypes`
WHERE
`required`=1
ORDER BY `sort`, `title`
可在旧版本的 mysql (5.6.22) 上运行和工作,但不能在新版本的 mysql (5.7.9) 上运行。 mysql 错误是“#1054 - 'where 子句'中的未知列 't'”。
配置文件一模一样,问题是什么我不明白。
我们更新了 mysql 服务器,许多查询停止工作。 请告诉我,这个功能在较新的 mysql 中已被弃用,或者可以设置 /etc/my.cnf?
不可能找到并修复可以使用此类请求的数十万行代码,因此最好将这种可能性包含在新服务器中。
谢谢!
【问题讨论】:
-
这是从 5.6 到 5.7 的更改页面,我没有看到任何关于此 dev.mysql.com/doc/refman/5.7/en/… 的确切信息,因为您正在执行
SELECT。 -
可能重复 stackoverflow.com/questions/34003818/…,因为它还有在 5.7 中停止工作的子查询。但它并没有说明如何在不重写的情况下解决它,所以我仍然认为其中一个是一个有效的开放问题。
-
谢谢你的链接,艾琳,但我的问题没有答案。问题在于更新 mysql 服务器(配置、更改或默认值),而不是错误的查询。 SQL 查询在旧版本的 mysql 上运行良好。
-
这正是我所说的,不是吗?这仍然是一个悬而未决的问题。问题是查询在 5.7 中的处理方式不同......你能测试一下吗?
SET optimizer_switch = 'derived_merge=off';这似乎是子查询的主要变化。 -
如果您在 5.6 和 5.7 中为您的查询运行 EXPLAIN 并发布结果,那将非常有帮助。
标签: mysql