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

Come posso ottenere gli ID degli antenati per una profondità di ricorsione arbitraria in una query SQL?

SELECT c.id, b.id, a.id 
FROM T 
INNER JOIN T AS c on T.parent_id=c.id 
INNER JOIN T AS b ON c.parent_id = b.id 
INNER JOIN T as a ON b.parent_id = a.id

supponendo che il tuo tavolo si chiami T. non testato però. non sono sicuro di cosa succede se d non ha tre genitori, probabilmente non ottieni nulla, potresti provare LEFT JOIN per quei casi per ottenere valori NULL per i grandi genitori. Inoltre, l'ultimo JOIN non è davvero necessario perché potresti semplicemente selezionare b.parent_id invece di a.id ma, sai, solo per portare a casa il pattern;)