SQL Query para pais e filhos do relacionamento
-
03-07-2019 - |
Pergunta
Eu tenho tabela db com relação pai-filho 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
Aqui ParentId = 0 significa que é um nó de nível de raiz. Agora eu quero escrever uma consulta SQL que irá retornar criança em todos os níveis de uma categoria principal.
por exemplo. para nodeId = 1, ele deve retornar 3, 4, 5, 6.
Estou usando o MS SQL Server 2005
Solução
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]
Outras dicas
Você deve olhar em usar o Set Modelo Nested para relações pai-filho dentro de um banco de dados SQL. É muito mais agradável do que tentar armazenar o parentID de registros na tabela como esta, e faz consultas como este muito mais fácil.
E só para ter certeza que funciona se o seu pai de si mesmo (caso contrário ele irá recorrer até que ele quebra):
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]
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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow