我们的框架的查询构建器自动将FROM子句包装在括号中;包括子查询。
以下用于5.6,但尝试升级到8时会引发语法错误。
SELECT t.* FROM ((SELECT * FROM table_name) t)
它可以在8中使用而没有外部括号。我在日志或网络上找不到任何对此更改的引用。有谁知道这是什么时候实现的,或者它是否可以在Mysql中进行配置?
此时要避免更改查询构建器或查找子查询的所有用途。谢谢。
根据documentation-尚未更改-看来应该允许这样做。文档的相关部分在下面使用星号突出显示:
table_reference: { table_factor | joined_table } table_factor: { tbl_name [PARTITION (partition_names)] [[AS] alias] [index_hint_list] | [LATERAL] table_subquery [AS] alias [(col_list)] | **( table_references )** }
注意,这表示表引用可以用括号括起来。这些与用于子查询的括号分开。
基于此,在文档或代码中,MySQL 8.0中似乎存在一个错误。我猜想当他们为令牌连接器中的横向联接等功能添加新功能时,该功能就会退出。
知道这是一个bug并不能真正帮助您解决实际的问题。基于该文档,MySQL 5.6的行为正确,即使该构造在其他数据库中也不起作用。
我注意到MariaDB 10.4没有这个问题。升级到MariaDB也许可以工作(否则应该具有非常相似的功能)。