Как преобразовать MSSQL CTE-запрос в MySQL? - PullRequest
25 голосов
/ 12 января 2012

в моей схеме MySQL у меня есть таблица category(id, parentid, name)

В MSSQL у меня есть этот запрос CTE (чтобы построить дерево категорий снизу вверх для предоставленного идентификатора категории:

with CTE (id, pid, name) 
as
(
    select id, parentid as pid,name
    from category
    where id = 197
      union all
        select CTE.pid as id , category.parentid as pid, category.name
        from CTE 
          inner join category 
            on category.id = CTE.pid
 )
 select * from CTE 

Как «преобразовать» этот запрос в MySQL?

Ответы [ 3 ]

32 голосов
/ 12 января 2012

К сожалению, MySQL не поддерживает CTE (общие выражения таблиц).Это давно пора ИМО.Часто вместо этого вы можете просто использовать подзапрос, но этот конкретный CTE рекурсивный : он ссылается на себя внутри запроса.Рекурсивные CTE чрезвычайно полезны для иерархических данных, но опять же: MySql их вообще не поддерживает.Вы должны реализовать хранимую процедуру, чтобы получить те же результаты.

Мой предыдущий ответ должен обеспечить хорошую отправную точку:

Создание дерева на основе глубины из иерархических данных в MySQL (без CTE)

2 голосов
/ 04 августа 2017

К счастью, в этом больше нет необходимости, поскольку MySQL начиная с 8.0.1 поддерживает CTE .

0 голосов
/ 11 июля 2018

к сожалению, MYSQl или XAMPP (MARIADB) mysql не поддерживает CTE (COMMON TABLE EXPRESSIONS), для этого вам придется использовать вложенные запросы.

для получения дополнительной информации нажмите на ссылку ниже: -

https://mariadb.com/kb/en/library/with/

...