#mysql #sql #mysql-workbench
Вопрос:
В MSSQL у меня есть запрос примерно такого рода:
WITH temp AS (
SELECT
*
FROM
xx.xxxx
)
Но WITH temp AS ()
не поддерживается в синтаксисе MySQL, интересно, каким должен быть эквивалентный синтаксис в MySQL Workbench? Спасибо.
Комментарии:
1. Он поддерживается в MySQL. Если вы используете старую версию MySQL 5.x, я бы настоятельно рекомендовал обновить ее.
2. @TheImpaler Привет, в настоящее время я использую MySQL Workbench v8.0, но я получил ошибку
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'temp AS ( xxxxxx' at line 1
, я только что загрузил скриншот ошибки в описании вопроса.3. Возможно, вы используете MySQL Workbench 8.0, но это всего лишь клиент. Поддерживаемый синтаксис SQL зависит от сервера MySQL. Вы можете проверить, какая версия сервера с помощью этого запроса:
SELECT VERSION();
Ответ №1:
Если у вас есть MySQL 5.x и вам нужно адаптировать запрос, содержащий CTE, затем преобразуйте
WITH cte AS (cte query text)
SELECT ...
FROM cte
...
Для
SELECT ...
FROM (cte query text) cte
...
Если существует более одного CTE, выполните эту замену с точностью от последнего CTE к предыдущему (возможно, вам потребуется использовать несколько копий некоторого текста подзапроса CTE — это норма).
Комментарии:
1. Привет, вы имеете в виду версию MySQL Workbench? Я использую v8.0, а не 5.x
2. dev.mysql.com/downloads/workbench Я использую его для выполнения запросов…
3. Аааа, спасибо , я использую
5.7.12 (MySQL Community Server)
, я попробовал синтаксис , который вы упомянули в ответе, это дало мне другую ошибкуError Code: 1370. execute command denied to user 'xxx'@'%' for routine xxx.DATEADD'
, вы знаете, что здесь происходит?4. Код @Cecilia SQL Server не может быть преобразован непосредственно в код MySQL — слишком много различий в синтаксисе. Преобразование диалекта-отдельная, иногда довольно сложная, а иногда даже неразрешимая задача. Создайте еще один вопрос, связанный с преобразованием, и опубликуйте полный SQL для преобразования.