xiaomo_aixuexi 2016-03-23 09:56 采纳率: 0%
浏览 16945

mysql中实现WITH AS语句

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中转换
  • 写回答

1条回答 默认 最新

  • 不良使 Python领域潜力新星 2023-06-06 21:18
    关注

    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 配置文件中来实现。

    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能