Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Einen Baum in MySQL platt machen?

Wenn Sie Ihr Beispiel verwenden, könnten Sie die Teilmenge der Elternnamen in Kindern abarbeiten, falls Elternnamen in den Namen von Angehörigen enthalten sind. Wenn ja, ziehen Sie eine Union-Abfrage in Betracht:

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

Natürlich Len() anpassen , Left() , oder Mid() Zeichenfolgenfunktionen und erweitern (d. h. Enkelkinder) gemäß dem tatsächlichen Namensmuster von Ancestry. Diese Lösung funktioniert nicht, wenn in untergeordneten Zeichenfolgenwerten kein Verweis auf Eltern vorhanden ist.