web-dev-qa-db-fra.com

Comment transformer une requête MSSQL CTE en MySQL?

dans mon schéma MySQL, j'ai la table category(id, parentid, name)

Dans la MSSQL, j'ai cette requête CTE (pour construire une arborescence de catégories de bas en haut pour un ID de catégorie fourni:

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 

Comment "transformer" cette requête en MySQL?

24
Tony

Malheureusement, MySQL ne prend pas en charge CTE (Common Table Expressions). C'est un retard de longue date, OMI. Souvent, vous pouvez simplement utiliser une sous-requête à la place, mais ce CTE particulier est récursif : il se réfère à lui-même dans la requête. Les CTE récursifs sont extrêmement utiles pour les données hiérarchiques, mais encore une fois: MySql ne les prend pas en charge du tout. Vous devez implémenter une procédure stockée pour obtenir les mêmes résultats. 

Une de mes réponses précédentes devrait constituer un bon point de départ:

Génération d'une arborescence basée sur la profondeur à partir de données hiérarchiques dans MySQL (pas de CTE)

32
Jon Black

Heureusement, ce n'est plus nécessaire, car MySQL à partir de 8.0.1supporte CTE .

2
Hubbitus

malheureusement, MYSQl ou XAMPP (MARIADB), mysql ne prend pas en charge les CTE (COMMON TABLE EXPRESSIONS), Pour les mêmes, vous devrez utiliser des requêtes imbriquées.

pour plus d'informations, cliquez sur le lien ci-dessous: -

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

0
NupzNupz