Преобразование хранимой процедуры CTE в Mysql-совместимый запрос к базе данных - PullRequest
0 голосов
/ 18 мая 2019

Моя таблица категорий -

  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 MSSQL на MySql server.Но я не мог изменить cte sp на обычный запрос sp.Сервер MySql версии 5.1.73 This is query output

1 Ответ

0 голосов
/ 18 мая 2019

Вы можете эмулировать поведение RCTE с помощью операторов управления потоком MySQL, таких как WHILE, LOOP или REPEAT..UNTIL, но все эти операторы разрешены только в хранимых подпрограммах, функциях, триггерах и событиях.Вы не можете использовать их в простых запросах, таких как SELECT.

Если вы можете использовать хранимые процедуры, такие как CALL AllCatPath(...) с MySQL, то вы можете реализовать рекурсию самостоятельно.Если хранимые подпрограммы не разрешены, вам придется перейти на другую реализацию деревьев в MySQL, например, «вложенные множества».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...