Non esiste un modo reale (almeno che io sappia) per eseguire un join "ricorsivo" in MySQL. Se si dispone di una tale struttura di tabella, la soluzione migliore che conosco è utilizzare le procedure memorizzate per scorrere e "raccogliere" righe correlate e/o creare "percorsi"; sfortunatamente, non puoi unirti ai risultati di una procedura memorizzata, quindi ciò di solito significa far cadere quei dati in una tabella temporanea predeterminata da utilizzare dopo che la procedura è stata eseguita.
In alternativa, puoi analizzare la tabella ricorsiva nel codice per determinarne la "profondità" corrente al fine di comporre la query a livello di codice.