sql >> Base de Datos >  >> RDS >> Mysql

¿Aplanar un árbol en MySQL?

Usando su ejemplo, podría trabajar con el subconjunto de nombres de los padres en los niños si los nombres de los padres estuvieran contenidos dentro de los nombres de los dependientes. Si es así, considere una consulta de unión:

# GREAT-GRANDPARNTS
SELECT DISTINCT Null As Parent, Parent As Dependent
FROM Ancestry
WHERE Len(Parent) = 1

UNION

# GRANDPARNTS
SELECT DISTINCT Left(Parent, 1) As Parent, Parent As Dependent
FROM Ancestry
WHERE Len(Parent) = 3

UNION

# PARENTS
SELECT DISTINCT Left(Child, 1) As Parent, Child As Dependent
FROM Ancestry
WHERE Len(Child) > 3

UNION

# CHILDREN
SELECT DISTINCT Left(Child, 3) As Parent, Child As Dependent
FROM Ancestry
WHERE Len(Child) > 3;

Por supuesto, ajuste Len() , Left() , o Mid() funciones de cadena y extensión (es decir, nietos) de acuerdo con el patrón de nombre real de Ancestry. Esta solución no funcionará si no hay una referencia de los padres en los valores de las cadenas secundarias.