Круглые скобки вокруг псевдонима подзапроса, изменение синтаксиса с версии 5.6? - PullRequest
0 голосов
/ 08 мая 2020

Конструктор запросов нашего фреймворка автоматически заключает предложение FROM в круглые скобки; включая подзапросы.

Следующее используется для работы с 5.6, но при попытке обновления до 8 выдает синтаксическую ошибку.

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

Работает в 8 без внешних скобок. Я не могу найти никаких ссылок на это изменение в журналах или в Интернете. Кто-нибудь знает, когда это было реализовано или можно ли его каким-либо образом настроить в Mysql?

Попытка избежать изменения построителя запросов или поиска всех вариантов использования подзапросов на этом этапе. Спасибо.

1 Ответ

0 голосов
/ 09 мая 2020

Согласно документации - которая не изменилась - похоже, это должно быть разрешено. Соответствующая часть документации выделена звездочками ниже:

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 есть ошибка - либо в документации, либо в коде. Думаю, когда они добавили в токенизатор новую функциональность для таких вещей, как боковые соединения, это выпало.

Знание, что это ошибка, на самом деле не поможет вам решить вашу настоящую проблему. MySQL 5.6 вёл себя правильно, основываясь на документации, даже если эта конструкция не работает в других базах данных.

Я заметил, что MariaDB 10.4 не имеет этой проблемы. Возможно, обновление до MariaDB сработает (в противном случае он должен иметь очень похожую функциональность).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...