Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Achatar uma árvore no MySQL?


Usando seu exemplo, você pode trabalhar com o subconjunto de nomes de pais em filhos, caso os nomes dos pais estejam contidos nos nomes dos dependentes. Em caso afirmativo, considere uma consulta de união:
# 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;

Claro, ajuste Len() , Left() , ou Mid() funções de string e estender (ou seja, netos) de acordo com o padrão de nome real do Ancestry. Esta solução não funcionará se não houver referência de pais em valores de string filho.