MySQL中`with xxx AS()`的等效语法是啥
Posted
技术标签:
【中文标题】MySQL中`with xxx AS()`的等效语法是啥【英文标题】:What's the equivalent syntax in MySQL for `with xxx AS ()`MySQL中`with xxx AS()`的等效语法是什么 【发布时间】:2021-05-11 15:34:04 【问题描述】:在 MSSQL 中,我有一个类似的查询:
WITH temp AS (
SELECT
*
FROM
xx.xxxx
)
但是 mysql 语法不支持 WITH temp AS ()
,我想知道 MySQL Workbench 中的等效语法应该是什么?谢谢。
下面是语法错误的截图:
【问题讨论】:
MySQL 支持。如果您使用的是旧版本的 MySQL 5.x,我强烈建议您升级。 @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
,我刚刚上传了问题描述中的错误截图。
您可能正在使用 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 的准确替换(您可能需要使用某些 CTE 子查询文本的多个副本 - 这是正常现象)。
【讨论】:
您好,您是指 MySQL Workbench 的版本吗?我使用的是 v8.0 而不是 5.x dev.mysql.com/downloads/workbench 我正在使用它来运行查询... 啊谢谢,我正在使用5.7.12 (MySQL Community Server)
,我尝试了你在答案中提到的语法,它给了我一个不同的错误Error Code: 1370. execute command denied to user 'xxx'@'%' for routine xxx.DATEADD'
,你知道这里发生了什么吗?
@Cecilia SQL Server 代码无法直接转换为 MySQL 代码 - 语法差异太多。方言转换是单独的、有时相当复杂、有时甚至无法解决的任务。创建另一个处理转换的问题,并发布要转换的完整 SQL。以上是关于MySQL中`with xxx AS()`的等效语法是啥的主要内容,如果未能解决你的问题,请参考以下文章
MySQL - WITH RECURSIVE AS 递归查询
MySQL - WITH RECURSIVE AS 递归查询