gpt4 book ai didi

mysql - 将CTE存储过程转换为Mysql兼容数据库查询

转载 作者:行者123 更新时间:2023-11-29 16:01:09 26 4
gpt4 key购买 nike

我的类别表是

  TABLE [Category](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Title] [nvarchar](512) NULL,
[Slug] [nvarchar](512) NULL,
[Details] [text] NULL,
[CategoryType] [int] NOT NULL,
[ParentId] [int] NULL,
[SortOrder] [int] NOT NULL
)

我的 CTE 存储过程是

CREATE PROCEDURE [dbo].[sp_AllCategoryPath]
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

;WITH CTE AS
(
SELECT Id, Title, Title as Path, ParentId, cast(Id as nvarchar(125)) as LinkPath,Slug
FROM Category
WHERE ParentId IS NULL
UNION ALL
SELECT t.[Id], t.[Title],
cast(cte.[Path] +'/'+ t.Title as nvarchar(512)),
t.ParentId,
cast(cte.[LinkPath] +'/'+ CONVERT(varchar(512), t.Id) as nvarchar(125)),
t.Slug
FROM Category t
INNER JOIN CTE ON t.ParentId = CTE.Id
)

SELECT cte.Id, cte.Title, cte.Path, cte.ParentId , c.Title as ParentName, LinkPath,cte.Slug
FROM CTE cte LEFT JOIN Category c ON cte.ParentId = c.Id
ORDER BY cte.Path

END

如何将此 cte sp 查询转换为 mysql sp 兼容版本?我想更改我的 sp 来查询,因为我正在将我的 asp.net core 应用程序数据库提供程序 MSSQL 更改为 MySql 服务器。但我无法将 cte sp 更改为正常的 sp 查询。我的 MySql 服务器版本 5.1.73 This is query output

最佳答案

您可以使用 MySQL 流控制语句(如 WHILELOOPREPEAT..UNTIL)模拟 RCTE 行为,但所有这些语句都是允许的仅在存储的例程、函数、触发器和事件内。您不能在 SELECT 等普通查询中使用它们。

如果您可以在 MySQL 中使用像 CALL AllCatPath(...) 这样的存储例程,那么您就可以自己实现递归。如果不允许存储例程,那么您必须迁移到 MySQL 中树的另一个实现,例如“嵌套集”。

关于mysql - 将CTE存储过程转换为Mysql兼容数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56198353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com