WITH n(parentId) AS
(SELECT menuId
FROM TSYS_MENU
WHERE menuid in
#{item}
UNION ALL
SELECT parentId
FROM TSYS_MENU
WHERE menuid in
#{item}
UNION ALL
SELECT nplus.parentId
FROM TSYS_MENU as nplus, n
WHERE n.parentId = nplus.menuid)
SELECT distinct parentId FROM n where parentId is not null
代码如上,如何在mysql中转换
MySQL 5.7 版本之后,支持使用 WITH
子句来实现递归查询,该功能类似于 Oracle 中的 CONNECT BY
语法。
对于你的 SQL 语句,可以使用如下方式在 MySQL 中实现:
WITH RECURSIVE n(parentId) AS (
SELECT menuId
FROM TSYS_MENU
WHERE menuid IN (1,2,3) -- 在这里替换为 item 参数
UNION ALL
SELECT parentId
FROM TSYS_MENU
WHERE menuid IN (1,2,3) -- 在这里替换为 item 参数
UNION ALL
SELECT nplus.parentId
FROM TSYS_MENU AS nplus, n
WHERE n.parentId = nplus.menuid
)
SELECT DISTINCT parentId
FROM n
WHERE parentId IS NOT NULL;
其中 WITH RECURSIVE
用于指定递归查询,n
是一个递归查询的名称,在递归查询中,每个递归项都使用 UNION ALL
连接起来,最后在递归查询中返回需要的结果集。最后,SELECT
语句用于从递归查询中返回结果。
需要注意的是,递归查询需要在 MySQL 中开启 WITH RECURSIVE
功能,可以通过将 with_recursive=on
加入到 MySQL 配置文件中来实现。