将MsSql存储过程转换为MySql-WITH树中的问题

问题描述

我需要将现有的Mssql存储过程转换为MysqL。下面提到的查询是我将要转换的示例存储过程。

CREATE PROCEDURE [mydb].[mysp]
@input_userId nvarchar(255) 
AS 
BEGIN 
WITH tree(userId,managerUserId,name,Level) AS
(
SELECT t1.userId,t1.managerUserId,t1.name,0
FROM UserData t1
WHERE managerUserId = @input_userId OR userId=@input_userId 
UNION ALL
SELECT t2.userId,t2.managerUserId,t2.name,t3.Level+1
FROM UserData t2
INNER JOIN tree t3 ON t2.managerUserId=t3.userId
) 

SELECT disTINCT(res.name),res.userId,res.Level,t1.empNo
FROM tree AS res
INNER JOIN
UserData AS t1 ON res.userId = t1.userId
ORDER BY res.name asc

END

我很困惑如何将有树的一部分转换为MysqL。我尝试将其替换为另一个选择,但是由于该树在其他2个选择查询中使用,因此未成功。 如果您能支持解决这个问题,我将非常感激。

已编辑:

我在MysqL 5.6中尝试以下查询

CREATE PROCEDURE mydb.mysp(
IN input_userId VARCHAR(255)) 
 
BEGIN 
SELECT res.name,t1.empNo
FROM
(
SELECT userId,Level
FROM
(
SELECT t1.userId,t3.Level+1
FROM UserData t2
INNER JOIN tree t3 ON t2.managerUserId=t3.userId
) AS tree
)
FROM tree AS res
INNER JOIN
UserData AS t1 ON res.userId = t1.userId
ORDER BY res.name ASC

END

这给出了类似的错误

sql错误(1064):您的sql语法有错误;检查与您的MysqL服务器版本相对应的手册以获取正确的语法,以在第20行的'FROM tree AS res INNER JOIN UserData AS t1 ON res.userId = t1.userId ORDER BY'附近使用

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)