Mysql
 sql >> Base de données >  >> RDS >> Mysql

Aplatir un arbre dans MySQL ?

En utilisant votre exemple, vous pouvez travailler sur le sous-ensemble de noms de parents chez les enfants si les noms de parents sont contenus dans les noms des personnes à charge. Si tel est le cas, envisagez une requête d'union :

# 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;

Bien sûr, ajustez Len() , Left() , ou Mid() les fonctions de chaîne et s'étendent (c'est-à-dire les petits-enfants) selon le modèle de nom Ancestry réel. Cette solution ne fonctionnera pas s'il n'y a pas de référence aux parents dans les valeurs de chaîne enfant.