Mysql
 sql >> Database >  >> RDS >> Mysql

Appiattire un albero in MySQL?

Usando il tuo esempio potresti lavorare sul sottoinsieme dei nomi dei genitori nei figli se i nomi dei genitori fossero contenuti all'interno dei nomi delle persone a carico. In tal caso, considera una query di unione:

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

Ovviamente aggiusta Len() , Left() o Mid() funzioni stringa ed estendono (ovvero, nipoti) in base al modello di nome Ancestry effettivo. Questa soluzione non funzionerà se non è presente alcun riferimento ai genitori nei valori di stringa figlio.