Maison >base de données >tutoriel mysql >Comment puis-je répliquer une requête MSSQL CTE récursive pour créer une arborescence de catégories dans MySQL ?

Comment puis-je répliquer une requête MSSQL CTE récursive pour créer une arborescence de catégories dans MySQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-01 08:54:13716parcourir

How Can I Replicate a Recursive MSSQL CTE Query for Building a Category Tree in MySQL?

Transformation d'une requête MSSQL CTE en MySQL

Dans un schéma MySQL avec une table 'category' contenant des colonnes pour l'identifiant, l'identifiant parent et nom, vous souhaitez répliquer une requête MSSQL CTE qui crée une arborescence de catégories de bas en haut pour un ID de catégorie spécifié. Cette requête est la suivante :

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 

Malheureusement, MySQL ne prend pas en charge les CTE. Par conséquent, utiliser une sous-requête à leur place n'est peut-être pas une option car le CTE en question est récursif, se référençant lui-même dans la requête. MySQL ne prend pas en charge les CTE récursifs.

Pour obtenir une fonctionnalité similaire, une procédure stockée doit être implémentée. Une réponse précédente sur la façon de « Générer un arbre basé sur la profondeur à partir de données hiérarchiques dans MySQL (sans CTE) » peut servir de point de départ pour l'élaboration d'une telle procédure.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn