2012-01-12 29 views
24

en mi esquema de MySQL, tengo la mesa category(id, parentid, name)¿Cómo transformar una consulta MSSQL CTE a MySQL?

En el MSSQL, tengo que CTE consulta (para construir un árbol de categorías de abajo hacia arriba para una categoría ID suministrado:

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 

Cómo 'transformar' esa consulta a MySQL

Respuesta

32

Desafortunadamente MySQL no soporta CTE (expresiones de tabla comunes) este es desde hace tiempo la OMI a menudo, sólo puede utilizar una subconsulta en su lugar, pero esta en particular es CTE recursiva ?..: se refiere a sí mismo dentro de la que ry. Los CTE recursivos son extremadamente útiles para los datos jerárquicos, pero nuevamente: MySql no los admite en absoluto. Debe implementar un procedimiento almacenado para obtener los mismos resultados.

una respuesta anterior de la mina debe proporcionar un buen punto de partida:

Generating Depth based tree from Hierarchical Data in MySQL (no CTEs)

+0

Creo que eso es todo lo que quería, muchas gracias :) – Tony

+0

@ f00, ¿así que alguna vez van a implementarlo? ¿O la respuesta es "nunca"? – Pacerier

-2

Afortunadamente no es necesario hacer eso, como MySQL partiendo de 8.0.1supports CTE.

+0

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación. - [De la crítica] (/ review/low-quality-posts/16938206) – Jonathan

+0

@Jonathan Responde la pregunta :) –

+0

@KubaOber Tienes razón, probablemente debería haber marcado que tiene respuesta de solo un enlace. Realmente debería agregar algún código para explicar cómo funciona esto, en lugar de simplemente vincularlo a un sitio web. De esta forma, es menos probable que se lo marque y vote a la baja. Una vez que hayas hecho eso, deja un comentario y me retractaré de mi comentario. – Jonathan

Cuestiones relacionadas