Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Obtendo dados de hierarquia de tabelas de auto-referência


Se o banco de dados for SQL 2005/2008 então...

A maneira mais fácil de obter isso é usando uma CTE (Common Table Expression) projetada para ser recursiva.
 WITH myCTE (Item_id, Depth)
 AS
 (
    Select Item_ID, 0 as Depth From yourTable where Item_Parent=0
    Union ALL
    Select yourTable.Item_ID, Depth + 1 
    From yourTable 
    inner join myCte on yourTable.item_Parent = myCte.Item_Id
 )

 Select Item_id, Depth from myCTE

A saída é a seguinte:
Item_Id  Depth
    1   0
    2   0
    3   1
    4   1
    5   2

A partir disso, você pode formatá-lo como desejar.