Recursivo

22/09/2004 - 15:52 por Paul | Informe spam
Tengo una tabla donde tengo una columna q es padre y otra
columna donde se encuentran los hijos de la columna
padre,pero estos a su vez pueden tener hijos tambien y asi
sucesivamente, quisiera hacer una consulta donde al
pasarle como parametro al padre principal me devuelva
todos los hijos de este y los posibles hijos de estos.
Gracias.
 

Leer las respuestas

#1 Gustavo Larriera [MVP]
22/09/2004 - 16:38 | Informe spam
En SQL Server 2005 las consultas sobre datos recursivos se podrán hacer con
bastante simpleza usando las Common Table Expressions (CTE). Mientras tanto
en SQL Server 2000, hay que hacerlo manualmente. Hay muchos articulos que
explican como resolver esos temas, estos son algunos:

More Trees & Hierarchies in SQL
http://www.sqlteam.com/item.asp?ItemIDˆ66

SQL Graph Algorithms
http://willets.org/sqlgraphs.html

Representing Trees in a relational DB
http://fungus.teststation.com/~jon/treehandling/TreeHandling.htm


El siguiente algoritmo lo usé de ejemplo en una conferencia, busca
recursivamente los empleados de un determinado jefe usando la tabla
Employees de la base Northwind. Espero te sirva de inspiración.

USE northwind
GO

DECLARE @employeeMgr nchar(5)
SET @employeeMgr = '2'
DECLARE @RowsAdded int
DECLARE @reports TABLE (employeeid nchar(5) primary key, lastname
nvarchar(50) NOT NULL, reportsto nchar(5), title nvarchar(30), processed
tinyint default 0)

INSERT @reports
SELECT employeeid, lastname, reportsto, title, 0
FROM employees
WHERE employeeid = @employeeMgr

SET @RowsAdded = @@rowcount

WHILE @RowsAdded > 0
BEGIN
UPDATE @reports SET processed = 1 WHERE processed = 0

INSERT @reports
SELECT e.employeeid, e.lastname, e.reportsto, e.title, 0
FROM employees e, @reports r
WHERE e.reportsto=r.employeeid and e.reportsto <> e.employeeid and
r.processed = 1

SET @RowsAdded = @@rowcount
UPDATE @reports SET processed = 2 WHERE processed = 1
END

SELECT * FROM @reports






Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Paul" wrote in message
news:0a2601c4a0ab$66e015f0$
Tengo una tabla donde tengo una columna q es padre y otra
columna donde se encuentran los hijos de la columna
padre,pero estos a su vez pueden tener hijos tambien y asi
sucesivamente, quisiera hacer una consulta donde al
pasarle como parametro al padre principal me devuelva
todos los hijos de este y los posibles hijos de estos.
Gracias.

Preguntas similares