包围子查询别名,语法从5.6更改?

问题描述 投票:0回答:1

我们的框架的查询构建器自动将FROM子句包装在括号中;包括子查询。

以下用于5.6,但尝试升级到8时会引发语法错误。

SELECT t.* FROM ((SELECT * FROM table_name) t)

它可以在8中使用而没有外部括号。我在日志或网络上找不到任何对此更改的引用。有谁知道这是什么时候实现的,或者它是否可以在Mysql中进行配置?

此时要避免更改查询构建器或查找子查询的所有用途。谢谢。

mysql sql
1个回答
0
投票

根据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也许可以工作(否则应该具有非常相似的功能)。

© www.soinside.com 2019 - 2024. All rights reserved.