relaciones - Consulta SQL para la relación padre-hijo
relaciones laravel (4)
WITH Temp_Menu AS
(
SELECT AM.* from FCB_AccessMenu AM where AM.[ParentId] = 6
UNION ALL
SELECT AM.* FROM FCB_AccessMenu AM ,Temp_Menu TM WHERE AM.[ParentID]=TM.[MenuID]
)
SELECT * FROM Temp_Menu ORDER BY ParentID
Tengo una tabla db con la relación padre-hijo como:
NodeId NodeName ParentId
------------------------------
1 Node1 0
2 Node2 0
3 Node3 1
4 Node4 1
5 Node5 3
6 Node6 5
7 Node7 2
Aquí parentId = 0 significa que es un nodo de nivel raíz. Ahora quiero escribir una consulta SQL que devolverá el elemento secundario en todos los niveles de una categoría principal.
por ejemplo, para nodeId = 1, debería devolver 3, 4, 5, 6.
Estoy usando MS SQL Server 2005
with [CTE] as (
select * from [TheTable] c where c.[ParentId] = 1
union all
select * from [CTE] p, [TheTable] c where c.[ParentId] = p.[NodeId]
)
select * from [CTE]
Debería considerar el uso del modelo de conjunto anidado para las relaciones padre-hijo dentro de una base de datos SQL. Es mucho mejor que tratar de almacenar el parentID de los registros en la tabla de esta manera, y hace que las consultas como esta sean mucho más fáciles.
Y solo para asegurarse de que funcione si es uno de los padres (de lo contrario, se repetirá hasta que se rompa):
with [CTE] as (
select * from [TheTable] c where c.[ParentId] = 1
union all
select * from [CTE] p, [TheTable] c where c.[ParentId] = p.[NodeId]
and c.[ParentId] <> c.[NodeId]
)
select * from [CTE]