sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo puedo obtener identificadores de antepasados ​​para una profundidad de recursión arbitraria en una consulta 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

suponiendo que su tabla se llame T. sin probar. no estoy seguro de qué sucede si d no tiene tres padres, probablemente no obtenga nada, podría intentar LEFT JOIN para esos casos para obtener valores NULL para los grandes padres. Además, el último JOIN no es realmente necesario porque simplemente podría seleccionar b.parent_id en lugar de a.id pero, ya sabe, solo para llevar a casa el patrón;)