Query SQL per la relazione figlio principale
-
03-07-2019 - |
Domanda
Ho una tabella db con relazione figlio principale come:
NodeId NodeName ParentId
------------------------------
1 Node1 0
2 Node2 0
3 Node3 1
4 Node4 1
5 Node5 3
6 Node6 5
7 Node7 2
Qui parentId = 0 significa che è un nodo a livello di root. Ora voglio scrivere una query SQL che restituirà figlio a tutti i livelli di una categoria padre.
es. per nodeId = 1, dovrebbe restituire 3, 4, 5, 6.
Sto utilizzando MS SQL Server 2005
Soluzione
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]
Altri suggerimenti
È necessario esaminare l'utilizzo del modello di set nidificato per le relazioni padre-figlio all'interno di un database SQL. È molto più bello che provare a memorizzare il parentID dei record nella tabella in questo modo, e rende le query come questa molto più facili.
E solo per assicurarsi che funzioni se è un genitore di se stesso (altrimenti si ripeterà fino a quando non si rompe):
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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow