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

Relación padre-hijo dentro de una sola tabla

Dado que tiene 4 niveles finitos, no debería necesitar recursividad (aunque sería útil poder usar, por ejemplo, MS SQL CTE).

Algo como:

SELECT
  t4.uid as child, 
  --t3.uid as parent,
  --t2.uid as grand_parent,
  --t1.uid as great_grand_parent,
  t1.parentid as great_great_grand_parent
FROM
  your_table_name t1

  inner join your_table_name t2
  on t2.parentid = t1.uid

  inner join your_table_name t3
  on t3.parentid = t2.uid

  inner join your_table_name t4
  on t4.parentid = t3.uin

where 
  t4.uid = '10007' -- your start node.

Si necesita hacer esto para varios nodos, deberá unirlo a algo que seleccione sus nodos de inicio o, por ejemplo, reemplazar el anterior WHERE t4.uid = '10007' cláusula para ser WHERE t4.uid IN (SELECT DISTINCT uid FROM your_table_name)

Esto se hizo a mano alzada, así que disculpas por los errores tipográficos.